我的应用程序旨在计算员工工作的小时数。我必须每周显示总数。为此,我每天都循环播放,每天都使用Add()方法。最后,我在标签上写下小时和分钟。
foreach (DataRow day in days.Rows)
{
TimeSpan tsToAdd = new TimeSpan((int)day["hours"], (int)day["minutues"],0);
ts = ts.Add(tsToAdd);
}
label.text= ts.Hours.ToString("00") + ":" + ts.Minutes.ToString("00");
但是,当ts.hours超过24时,它从0重新开始。例如,25小时30分钟变为1小时30分钟。 我尝试使用TotalHour和TotalMinutes,但这不是我想要的。
如何显示,例如" 30:20"?
THX
答案 0 :(得分:1)
答案 1 :(得分:1)
TimeSpan
尝试将其所有值保持在正常约定的时钟时间内 - 因此Hours
应始终在0-23范围内,Minutes
始终为0-59等。您创建了一个25小时的TimeSpan
,它会意识到这是一天一小时,因此Hours
将显示为1
,而Days
将显示为{{1}也是。
您可以使用1
属性获取TimeSpan
所代表的总小时数。这是TotalHours
,并且还包括float
中的分钟,秒等,因此1天,1小时和1分钟的范围TimeSpan
值为{TotalHours
1}}。
因此,为了显示您想要的小时数,在格式化25.01666667
进行显示时,您需要丢弃该小数组件。 TotalHours
似乎是一个很好的选择,但它不会为负时间跨度工作,所以正确的选择是Math.Floor
。
Math.Truncate
虽然实际上在使用Math.Truncate(ts.TotalHours).ToString("00") + ":" + ts.Minutes.ToString("00")
这样的格式字符串时,ToString
调用并不是必需的,因为它具有相同的效果,因此如果您想要一个字符串,您可以将其保留。