使用 timespan 添加超过 24 小时的间隔
Use timespan to add intervals over 24 hours
我有一个旨在计算员工工作小时数的应用程序。我必须每周显示总计。为此,我每天循环,并且每天都使用 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”?
感谢
您可以使用 TotalHours
属性 获取总(小数)小时数。
因此,也许:
label.text = string.Format("{0:N2}:{1:N2}", Math.Floor(ts.TotalHours) + ":" + ts.Minutes);
TimeSpan
试图将其所有值保持在时钟时间的正常约定内 - 因此 Hours
应始终在 0-23 范围内,Minutes
始终为 0-59 等.如果你创建一个25小时的TimeSpan
,它会意识到这是一天零一个小时,所以Hours
会显示为1
,而Days
会是1
还有。
您可以使用 TotalHours
属性 获得 TimeSpan
表示的总小时数。这是一个 float
,并且在 TimeSpan
中也包括分钟、秒等,因此 1 天 1 小时 1 分钟的跨度具有 TotalHours
值 25.01666667
.
因此,要显示您想要的小时数,您需要在格式化 TotalHours
以供显示时丢弃该小数部分。 Math.Floor
似乎是一个不错的选择,但它不适用于负时间跨度,因此正确的选择是 Math.Truncate
.
Math.Truncate(ts.TotalHours).ToString("00") + ":" + ts.Minutes.ToString("00")
虽然实际上当使用 ToString
和这样的格式字符串时, Math.Truncate
调用不是必需的,因为它具有相同的效果,所以如果您需要一个字符串,您可以将其省略。
我有一个旨在计算员工工作小时数的应用程序。我必须每周显示总计。为此,我每天循环,并且每天都使用 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”?
感谢
您可以使用 TotalHours
属性 获取总(小数)小时数。
因此,也许:
label.text = string.Format("{0:N2}:{1:N2}", Math.Floor(ts.TotalHours) + ":" + ts.Minutes);
TimeSpan
试图将其所有值保持在时钟时间的正常约定内 - 因此 Hours
应始终在 0-23 范围内,Minutes
始终为 0-59 等.如果你创建一个25小时的TimeSpan
,它会意识到这是一天零一个小时,所以Hours
会显示为1
,而Days
会是1
还有。
您可以使用 TotalHours
属性 获得 TimeSpan
表示的总小时数。这是一个 float
,并且在 TimeSpan
中也包括分钟、秒等,因此 1 天 1 小时 1 分钟的跨度具有 TotalHours
值 25.01666667
.
因此,要显示您想要的小时数,您需要在格式化 TotalHours
以供显示时丢弃该小数部分。 Math.Floor
似乎是一个不错的选择,但它不适用于负时间跨度,因此正确的选择是 Math.Truncate
.
Math.Truncate(ts.TotalHours).ToString("00") + ":" + ts.Minutes.ToString("00")
虽然实际上当使用 ToString
和这样的格式字符串时, Math.Truncate
调用不是必需的,因为它具有相同的效果,所以如果您需要一个字符串,您可以将其省略。