2

我有一些代码,例如,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

我能做些什么来避免包裹?

谢谢

4

3 回答 3

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铸造从小时数中截断分钟。

于 2013-04-01T20:23:02.060 回答
0

仅用于DateTime.ToString获取分钟数,并自行计算小时数。

return string.Format("{0:0}:{1}", Math.Truncate(d+0.005m), TimeSpan.FromHours(d+0.005m).ToString("mm"));
于 2013-04-01T20:21:44.143 回答
0

h格式仅报告不计为天数的小时数。见这里

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

于 2013-04-01T20:23:22.440 回答