9

我有一个自定义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

这是自定义 DateTime 格式字符串的 MSDN 文档

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

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

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

4

5 回答 5

18

/是日期分隔符,即文化相关 - 在您当前的文化中,它被定义为-. 如果您想始终/使用:

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

或者

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

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

于 2012-10-11T23:01:20.533 回答
13

尝试:

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

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

于 2012-10-11T22:52:22.350 回答
2

本文解释了当前区域性如何更改 DateTime.ToString(string) 的输出。阅读包含此文本的部分:

此方法使用从当前文化派生的格式信息

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

本文介绍了如何显式地为 DateTime.ToString 提供要使用的区域性。

于 2012-10-11T22:57:42.360 回答
1

尝试添加不变的文化,使用 InvariantCulture 属性

Console.WriteLine("Date: " + datetime.ToString("M/d/yyyy h:m:ss tt", CultureInfo.InvariantCulture));
于 2012-10-11T23:03:07.000 回答
0
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"));
于 2015-08-26T18:41:33.470 回答