使用时间跨度在24小时内添加间隔

时间:2016-07-26 10:37:17

标签: c# timespan

我的应用程序旨在计算员工工作的小时数。我必须每周显示总数。为此,我每天都循环播放,每天都使用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

2 个答案:

答案 0 :(得分:1)

您可以使用TotalHours属性获取总小时数(小数)。

相反,也许:

show sections only

答案 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调用并不是必需的,因为它具有相同的效果,因此如果您想要一个字符串,您可以将其保留。