【问题标题】:Formatting Problem Date with DateTime使用 DateTime 格式化问题日期
【发布时间】:2011-01-14 06:37:19
【问题描述】:

我想用这种格式显示日期:

  • MM/dd/yyyy HH:mm:ss tt

例如:

  • 01/04/2011 03:34:03 PM

但是我对下面的代码有问题

class Program
{
    static void Main(string[] args)
    {
        DateTime dt = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 0, 0, 0);
        string displayedDate = dt.ToString("MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
        Console.WriteLine(displayedDate);
        Console.Read();
    }
}

显示:

01/04/2011 12:00:00 AM

而不是

01/04/2011 00:00:00 AM

有人知道为什么吗?

谢谢!

【问题讨论】:

  • 在 AM/PM 系统中,午夜表示为 12:00:00 AM。
  • 好的,这就是混乱。我认为午夜被表示为 00:00:00 AM 而不是 12:00:00 AM :-/
  • 这是一个合理的混淆。在美国,12 小时制更为流行,其中 12:00 AM 是午夜。据我了解,在其他大多数地方,24 小时制是首选,因为它没有歧义。在该系统下,午夜确实是 0:00(不需要 AM/PM 说明符)。无论如何,很高兴看到您的问题得到解决!

标签: c# .net datetime datetime-format


【解决方案1】:

因为您指定了 12 小时制而不是 24 小时制。

DateTime.ToString 方法的documentation 提供了格式说明符及其含义的完整表格。小时的选择如下:

"h" 小时,使用从 1 到 12 的 12 小时制。 "hh" 小时,使用从 01 到 12 的 12 小时制。 "H" 小时,使用从 0 到 23 的 24 小时制。 "HH" 小时,使用从 00 到 23 的 24 小时制。


因此,您需要使用HH,而不是hh 自定义格式说明符。更改此行:

string displayedDate = dt.ToString("MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);

到这里:

string displayedDate = dt.ToString("MM/dd/yyyy HH:mm:ss tt", CultureInfo.InvariantCulture);

【讨论】:

    【解决方案2】:

    您已指定需要 12 小时制而不是 24 小时制,这就是原因。你应该使用HHfor 24 小时。请参阅reference。这应该适合你:

    string displayedDate = dt.ToString("MM/dd/yyyy HH:mm:ss tt", CultureInfo.InvariantCulture);
    

    【讨论】:

    • 我知道我选择了 12 小时格式。在这种格式中,我们将“午夜”写为 12h00 AM ?
    【解决方案3】:

    您需要在 ToString() 调用中将 'hh' 更改为 'H'。

    【讨论】:

    • 是的,有点累了,读到它需要换个方向。不知何故,这转化为更改为“h”。
    猜你喜欢
    • 2013-06-03
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多