为什么 DateTime.ToString() 似乎忽略了线程当前文化?

Why does DateTime.ToString() seem to ignore the thread current culture?

我有这个代码:

var ci = new CultureInfo("it-IT", false);
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;

var format = "HH:mm\:ssZ";
var formatted = DateTime.Now.ToString( format, ci );

and... 格式恰好在我的机器上是 09:08:32Z,它的默认文化不同于 "Italy"。 MSDN says 冒号是一个格式说明符,并提供了一个示例,说明如何将未转义的冒号格式化为具有 "it-IT" 文化(我在上面的代码中使用的那个)的点。

在我的代码中,我有一个冒号字符转义和一个未转义,它们都被格式化为冒号。

为什么会这样?为什么线程当前文化似乎被忽略了?

"it-IT"文化的时间分隔符是一个冒号,如果你检查ci.DateTimeFormat.TimeSeparator就可以看到。估计是MSDN文档有误。

如果确实需要,您可以随时手动更改时间分隔符 (ci.DateTimeFormat.TimeSeparator = ".")。

编辑: 如评论中所述,似乎 the time separator for the it-IT culture was a dot in .NET 3.5, but was changed to a colon in .NET 4.0.