【问题标题】:Custom DateTime format string not working as expected自定义日期时间格式字符串未按预期工作
【发布时间】:2012-10-11 22:45:07
【问题描述】:

我有一个自定义的DateTime 格式字符串:"M/d/yyyy h:m:ss tt"

例如,日期为“2012 年 9 月 18 日 @中午”,我希望其输出类似于 "9/18/2012 12:0:00 PM"

时间的格式似乎正确,但日期部分却搞砸了。我看到日期格式为"MM-dd-yyyy",但我不知道为什么。

这里是一些重现问题的示例代码:

var datetime = DateTime.Now;
Console.WriteLine("Date: " + datetime.ToString("MMMM d, yyyy"));       // Date: October 11, 2012 --> correct
Console.WriteLine("Date: " + datetime.ToString("M/d/yyyy h:m:ss tt")); // Date: 10-11-2012 4:34:17 PM --> wrong

这里是MSDN doc for custom DateTime format strings

关于我做错了什么有什么想法吗?我怎样才能达到我想要的结果?

编辑:
示例代码的最后一行不正确的是连字符而不是斜杠,我不知道为什么。

另外,我的电脑语言设置为英语(加拿大)。但我的“短”和“长”日期格式都不像M-d-yyyy,所以我不知道它是从哪里来的。

【问题讨论】:

  • 另外,请不要问为什么奇怪的格式(没有零占位符等),我正在与只接受这种格式的日期的外部服务集成。否则它不会是我的第一选择。 ;)
  • 我得到的输出显示在每行示例代码旁边的 cmets 中。这是错误的,因为(在我的系统上),我得到“Date: 10-11-2012 4:34:17 PM”作为输出。
  • 这是正确的输出。我们在 10 月 = 10。
  • @sylon - 注意连字符而不是斜杠
  • 你以什么文化运行你的窗口?

标签: c# string datetime .net-4.0 datetime-format


【解决方案1】:

/ 是日期分隔符,即取决于文化 - 在您当前的文化中,它被定义为 -。如果你总是想要/,请使用:

Console.WriteLine("Date: " + datetime.ToString("M\"/\"d\"/\"yyyy h:m:ss tt"));

Console.WriteLine("Date: " + datetime.ToString("M'/'d'/'yyyy h:m:ss tt"));

即将要“按原样”输出的部分放在引号内。

【讨论】:

  • 我不知道斜线字符不是文字字符,谢谢!
【解决方案2】:

试试:

datetime.ToString("M/d/yyyy h:m:ss tt", CultureInfo.InvariantCulture);

您的文化可能会覆盖您的日期分隔符。

【讨论】:

    【解决方案3】:

    This article 解释了当前文化如何改变 DateTime.ToString(string) 的输出。阅读包含此文本的部分:

    此方法使用来自当前的格式信息 文化

    This article 解释了如何获取/设置文化,以便您可以测试这种可能性。

    This article 解释了如何明确地为 DateTime.ToString 提供要使用的文化。

    【讨论】:

      【解决方案4】:

      尝试添加不变的文化,Using the InvariantCulture Property

      Console.WriteLine("Date: " + datetime.ToString("M/d/yyyy h:m:ss tt", CultureInfo.InvariantCulture));
      

      【讨论】:

        【解决方案5】:
        Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
        var datetime = DateTime.Now;
        Console.WriteLine("Date: " + datetime.ToString("MMMM d, yyyy"));
        
        // Date: October 11, 2012 --> correct
        Console.WriteLine("Date: " + datetime.ToString("M/d/yyyy h:m:ss tt"));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-14
          • 1970-01-01
          • 2017-02-23
          • 1970-01-01
          • 2022-11-11
          相关资源
          最近更新 更多