为什么DateTime.ToString()似乎忽略了线程当前的区域性
本文关键字:线程 区域性 ToString DateTime 为什么 | 更新日期: 2023-09-27 18:21:55
我有这个代码:
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说冒号是一个格式说明符,并提供了一个示例,说明如何使用"it-it"区域性(我在上面的代码中有一个)将未转义的冒号格式化为点。
在我的代码中,我有一个转义的冒号和一个未转义的冒号,它们都被格式化为冒号。
为什么会发生这种情况?为什么线程当前的文化似乎被忽视了?
"it-it"区域性的时间分隔符是一个冒号,如您在检查ci.DateTimeFormat.TimeSeparator
时所见。我想MSDN文档是错误的。
如果您真的需要,您可以随时手动更改时间分隔符(ci.DateTimeFormat.TimeSeparator = "."
)。
编辑:如评论中所述,it it区域性的时间分隔符在.NET 3.5中似乎是一个点,但在.NET 4.0中更改为冒号。