将工作时间包装转换为24小时的代码
本文关键字:24小时 代码 转换 工作 时间 包装 | 更新日期: 2023-09-27 18:06:47
我有一些代码,例如27:30(27小时30分钟),并将其转换为十进制,如27.5。我有另一个函数做相反的事。
public class Time
{
public static string Hours(decimal d)
{
return TimeSpan.FromHours((double)(d + 0.005M)).ToString("h'':mm");
}
public static decimal Hours(string s)
{
decimal r;
if (decimal.TryParse(s, out r))
return r;
return (decimal)TimeSpan.Parse(s).TotalHours + 0.005M;
}
}
问题是,从十进制到字符串的转换似乎需要24小时。如果我给它30,它给我6,这是错误的。应该是30:00
我该怎么做才能避免换行?
谢谢
TotalHours
没有格式说明符,所以你必须自己编写整个逻辑:
public static string Hours(decimal d)
{
var ts = TimeSpan.FromHours((double)(d + 0.005M));
return string.Format("{0:0}:{1:00}", (int)ts.TotalHours, ts.Minutes);
}
(int)ts.TotalHours
转换从小时数中截断分钟。
使用DateTime.ToString
只获取分钟,并自己计算小时。
return string.Format("{0:0}:{1}", Math.Truncate(d+0.005m), TimeSpan.FromHours(d+0.005m).ToString("mm"));
h
格式只报告不计算为天数部分的小时数。看到这里。
您可以通过添加d
来输出天数,或者如果您想要非标准的行为,可以在自己的代码中执行转换。