我有一个自定义的DateTime
格式字符串:"M/d/yyyy h:m:ss tt"
。
例如,对于日期' 2012年9月18日@onon',我希望此输出类似于"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
所以我不知道它来自哪里。
答案 0 :(得分:17)
/
是日期分隔符,与文化相关 - 在您当前的文化中,它被定义为-
。如果您希望始终使用/
:
Console.WriteLine("Date: " + datetime.ToString("M\"/\"d\"/\"yyyy h:m:ss tt"));
或
Console.WriteLine("Date: " + datetime.ToString("M'/'d'/'yyyy h:m:ss tt"));
即。将你想要输出的部分“按原样”放在引号内。
答案 1 :(得分:13)
尝试:
datetime.ToString("M/d/yyyy h:m:ss tt", CultureInfo.InvariantCulture);
您的文化可能会覆盖您的日期分隔符。
答案 2 :(得分:2)
This article解释了当前文化如何改变DateTime.ToString(string)的输出。阅读包含此文本的部分:
此方法使用从当前导出的格式信息 培养
This article解释了如何获取/设置文化,以便您可以测试这种可能性。
This article解释了如何使用文化显式提供DateTime.ToString。
答案 3 :(得分:1)
尝试添加不变文化Using the InvariantCulture Property
Console.WriteLine("Date: " + datetime.ToString("M/d/yyyy h:m:ss tt", CultureInfo.InvariantCulture));
答案 4 :(得分: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"));