【问题标题】:Code to convert work hours wraps to 24 hours? [duplicate]将工作时间转换为 24 小时的代码? [复制]
【发布时间】:2013-04-01 20:15:08
【问题描述】:

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

我可以做些什么来避免包装?

谢谢

【问题讨论】:

  • 它不是 24 小时换行的,您还必须查看“Days”属性。对于 30 小时,天数 = 1 和小时数 = 6。这就是您看到“6:00”的原因。
  • @ConradFrix,TimeSpan 的 ToString 中的“h”不显示“TotalHours”。它仅从“小时”属性中提取。
  • @David 我的错误我在看Hours(string s) 而不是Hours(decimal)

标签: c# asp.net


【解决方案1】:

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 转换会从小时数中截断分钟。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      h 格式仅报告小时数,不计为天数的一部分。见here

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

      【讨论】:

        猜你喜欢
        • 2013-10-14
        • 2012-04-09
        • 1970-01-01
        • 2021-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-01
        • 2015-01-24
        相关资源
        最近更新 更多