【问题标题】:How do I format hours in DateTime to return 0 instead of 12?如何在 DateTime 中格式化小时以返回 0 而不是 12?
【发布时间】:2009-07-15 03:34:23
【问题描述】:

默认情况下,日期时间格式字符串中的小时将 0 转换为 12。 例如,如果您有

DateTime dt = new DateTime(1999, 1, 1, 0, 0, 0);
string s = dt.ToString("h:mm:ss");

s 的值将是“12:0:0”,而不是“0:0:0”。有没有办法代替“0:00:00”?

【问题讨论】:

    标签: c# .net datetime formatting


    【解决方案1】:

    试试

    string s = dt.ToString("H:mm:ss");
    

    这是reference page.

    【讨论】:

    • 嗯。从外观上看,我认为 OP 想要一个 12 小时制的时钟。 “默认情况下,小时......将0转换为12......有没有办法代替“0:00:00”?
    【解决方案2】:

    你很接近,尝试使用这个代替:

    string s = dt.ToString("H:mm:ss");
    

    【讨论】:

      【解决方案3】:
      string s = (dt.Hour >= 12 ? dt.Hour - 12 : dt.Hour).ToString() +
          dt.ToString(":mm:ss");
      

      显然这不是您想要的。按照我阅读您帖子的方式,您想要一个 12 小时制 将“12:00”重新映射到“0:00”(一些国际时钟会这样做),这会产生。此行为没有格式字符串,因此您必须自己创建字符串。

      您还可以阅读有关DateTime 格式字符串here 的更多信息。

      【讨论】:

      • 这是目前唯一正确的答案,显然这就是它被下载的原因。问题的措辞方式、接受的答案和目前可见的其他答案确实将 0 保留为 0,但它们具有改变问题未要求的其他值的副作用。他们在下午 1 点更换。从 1 点到 13 点。他们在晚上 11 点更换。从 11 点到 23 点。他们将中午 12 点保留为 12 点,即使问题的措辞要求 0(返回 0 而不是 12)。我们开始吧,这个帖子中发布的唯一正确答案,它被否决了。
      • @Windows 程序员 - 谢谢你;我很高兴我不是唯一一个按面值阅读 OP 的人。 :)
      • OP 要求 12 小时制的问题在哪里?我对您的评论(和回答)感到困惑,因为 OP 的 DateTime 对象被初始化为午夜,并且 OP 要求一种方法来防止“将 0 转换为 12”的默认行为。
      • @Jeff Meatball Yang:OP 没有“要求 12 小时制”,而是通过指定“h:mm:ss”来使用。 OP 询问如何覆盖将 0 转换为 12 的默认行为。从技术上讲,您和其他答案也是这样做的,所以我没有对它们投反对票,但它们也有 not 询问的副作用在 OP 中。是的,我假设了几件事:OP 知道格式字符串“H”,但更重要的是,如果 OP 想要 24 小时制,他们会这样指定。对于给定的前任,它的措辞不是“如何获得 24 小时制”,而是“如何让 12 为 0”。
      【解决方案4】:

      用“H:mm:ss”代替“h:mm:ss”

      【讨论】:

        【解决方案5】:

        您需要在 ToString 方法中使用大写的 H 而不是小写的 h。

        即

        DateTime dt = new DateTime(1999, 1, 1, 0, 0, 0); 字符串 s = dt.ToString("H:mm:ss");

        【讨论】:

          猜你喜欢
          • 2014-05-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-07
          • 2019-07-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多