【问题标题】:Why does DateTime.ToString() seem to ignore the thread current culture? [duplicate]为什么 DateTime.ToString() 似乎忽略了线程当前文化? [复制]
【发布时间】:2015-11-13 17:45:41
【问题描述】:

我有这个代码:

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... formatted 在我的机器上恰好是09:08:32Z,它的默认文化不同于“意大利”。 MSDN says 冒号是一个格式说明符,并提供了一个示例,说明如何将未转义的冒号格式化为带有“it-IT”文化的点(我在上面的代码中使用的那个)。

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

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

【问题讨论】:

  • 你检查ci.DateTimeFormat.TimeSeparator的值了吗?它的价值是什么?
  • 我在 .NET 4.5 上尝试了您的代码,它显示 :TimeSeparator 代表 it-IT 文化。老实说,我认为您的代码没有任何问题。如果您设置ci.DateTimeFormat.TimeSeparator = ".",您的结果将是.NET 4.5 版本上的09.08:32Z。我没有看它的旧版本,但这些东西可以在 .NET 或 OS 版本上进行更改。

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


【解决方案1】:

“it-IT”文化的时间分隔符是一个冒号,如果您检查ci.DateTimeFormat.TimeSeparator,就可以看到。我猜是 MSDN 文档是错误的。

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

编辑: 如 cmets 所述,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.

【讨论】:

  • MSDN 到底是哪一部分错了?我没明白你的意思。
  • MSDN 显示了这个例子:2009-06-15T13:45:30 -> . (it-IT)。所以我猜他们实际上是指: (it-IT)
  • 有趣。这一切都始于我的 ASP.NET 服务使用Accept-Language: it-IT 获取请求并使用点格式化时间。
  • @Konamiman 哦,我明白了。是的,你是对的。由于文档基于.NET Framework 4.6和4.5版本,所以应该是:,而不是.
  • @sharptooth 看起来像 that 文化 changed after .NET 3.5 versionTimeSeparator。由于您标记为.net-4-5,因此将其视为: 是正常的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
  • 2011-01-26
  • 2018-11-09
  • 1970-01-01
  • 2020-05-02
  • 2013-02-27
  • 1970-01-01
相关资源
最近更新 更多