【发布时间】:2014-06-18 05:25:11
【问题描述】:
给定以下 C# 代码:
var dt = DateTime.Now;
Console.WriteLine("{0:MM/dd/yy} ... {1}", dt, string.Format("{0:MM/dd/yy}", dt));
...当短日期(在 Windows 7 下,Control Panel -> Region and Language -> Additonal Settings -> Date)设置为美国标准“M/d/yyyy”时,我明白了:
06/17/14 ... 06/17/14
但是,当我将短日期更改为“ddd dd MMM yyyy”时,我得到了:
06/17/14 ... 06 17 14
我的印象是 Console.WriteLine 和 string.Format 的字符串格式总是相同的 DateTime 值。这种差异的解释是什么?
编辑: 看起来这只发生在标准单元测试输出 (Visual Studio) 中,这是我最初看到问题的地方。当代码在控制台应用程序中执行时,输出为06 17 14 ... 06 17 14。
【问题讨论】:
-
当您明确设置格式字符串时,您的系统设置是什么并不重要。我认为这里发生了其他事情。
-
实际上它可能很重要,因为“/”不是文字字符而是分隔符,实际输出取决于文化,例如在德国,这将是一个“。”。但这并不能解释为什么在
Console.WriteLine和String.Format中使用相同的显式格式时输出会不同。 -
@Enigmativity:嗯,就 .NET 而言,改变短日期显然等于改变文化。我只是想知道为什么这两个方法调用的行为不一样。
-
@Dirk:对。看起来很奇怪。
-
我得到相同的输出 Console.WriteLine 和 string.Format 是
06 17 14 ... 06 17 14。我正在使用 Win 7 并从 .net framework 2.0 到 4.5.1 进行了测试
标签: c# .net datetime string.format console.writeline