将工作时间包装转换为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

我该怎么做才能避免换行?

谢谢

将工作时间包装转换为24小时的代码

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来输出天数,或者如果您想要非标准的行为,可以在自己的代码中执行转换。