将工作时间换算为24小时的代码?

时间:2013-04-01 20:15:08

标签: c# asp.net

我有一些代码,例如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.0它给了我6:00这是错的。应该是30:00

我该怎么办才能避免包裹?

由于

3 个答案:

答案 0 :(得分:3)

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从小时开始截断minuts。

答案 1 :(得分:0)

使用DateTime.ToString仅获取会议记录,并自行计算小时数。

return string.Format("{0:0}:{1}", Math.Truncate(d+0.005m), TimeSpan.FromHours(d+0.005m).ToString("mm"));

答案 2 :(得分:0)

h格式仅报告未计入天数的小时数。请参阅here

如果您想要非标准行为,可以通过添加d输出天数或在自己的代码中执行转换。