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

时间:2015-11-13 09:13:30

标签: c# .net datetime .net-4.5 string-formatting

我有这段代码:

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 );

和...格式恰好在我的机器上09:08:32Z,其默认文化与"意大利"不同。 MSDN says冒号是一个格式说明符,并提供了一个样本,说明如何将未转义的冒号格式化为带有" it-IT"的点。文化(我在上面的代码中所拥有的)。

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

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

1 个答案:

答案 0 :(得分:1)

“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