我有一个文本框,其文本为25:00:00。这表示25个小时。我正在尝试使用以下代码将此文本转换为时间跨度:
TimeSpan tTime = TimeSpan.Parse(man_hours_nbr.Text);
double sum10 = tTime.TotalHours;
hours = Convert.ToDecimal(sum10);
问题在于tTime看到的是25天(600小时)而不是25小时。为什么要阅读25天?然后,我需要将时间跨度设置为十进制,以便可以这样显示。我究竟做错了什么?谢谢
答案 0 :(得分:2)
您可以这样做:
string[] splitTime = man_hours_nbr.Text.Split(':');
int hours = Int32.Parse(splitTime[0]);
int minutes = Int32.Parse(splitTime[1]);
int seconds = Int32.Parse(splitTime[2]);
double totalHours = hours + minutes / 60.0 + seconds / 3600.0;
我只是用冒号将文本分成几部分。然后解析这些值,最后将它们加在一起。
答案 1 :(得分:1)
TimeSpan struct对于可以使用基督教的值有限制。如果您仅在文本框中捕获工时,则可以这样做(如下所示)。为简单起见,我省略了明显的错误检查,例如最大最小值和空值。
var textBoxValue = "25:20:00";
var hours = int.Parse(textBoxValue.Split(':')[0]) + int.Parse(textBoxValue.Split(':')[1])/60d + int.Parse(textBoxValue.Split(':')[2]) / 3600d;
答案 2 :(得分:0)
TimeSpan.ParseExact使用时钟时间而不是时间量。因此,您不能根据需要使用它。据我了解,您想从指定的字符串中获取总小时数,格式为“小时:分钟:秒”。希望下面的代码可以帮助您解决问题。已经发布了答案。如果遇到问题,下面的代码将是我要做的事情。
代码中的这一行
var hours = GetHours(man_hours_nbr.Text);
这是GetHours方法
public static double GetHours(string timeString)
{
var splitTime = timeString.Split(':');
if (splitTime.Length != 3)
throw new ArgumentException("Time string not in format HH:MM:SS");
var hours = Convert.ToDouble(splitTime[0]);
var mins = Convert.ToDouble(splitTime[1]);
var seconds = Convert.ToDouble(splitTime[2]);
var time = new TimeSpanBuilder()
.WithHours(hours)
.WithMinutes(mins)
.WithSeconds(seconds)
.Build();
return time.TotalHours;
}
这是TimeSpanBuilder类,(使用构建器模式)
public class TimeSpanBuilder
{
private TimeSpan _ts = TimeSpan.Zero;
public TimeSpanBuilder WithHours(double hours)
{
_ts = _ts.Add(TimeSpan.FromHours(hours));
return this;
}
public TimeSpanBuilder WithMinutes(double mins)
{
_ts = _ts.Add(TimeSpan.FromMinutes(mins));
return this;
}
public TimeSpanBuilder WithSeconds(double seconds)
{
_ts = _ts.Add(TimeSpan.FromMinutes(seconds));
return this;
}
public TimeSpan Build()
{
return _ts;
}
}
答案 3 :(得分:-1)
正如评论中指出的那样,您不能直接解析25小时。但是您可以做的是将小时数解析为几天,然后从TimeSpan中获取总时数。大致如下:
Ctrl + K
@“ dd ...”字符串是输入的格式,其中“ d”代表日,“ h”代表小时,“ m”代表分钟,“ s”代表秒。因此,您输入的时间为1天1小时(总共25小时)为“ 01:01:00:00”