【问题标题】:CultureInfo("fr-BE") different on Windows 8.1 than beforeCultureInfo("fr-BE") 在 Windows 8.1 上与以前不同
【发布时间】:2015-01-07 15:15:19
【问题描述】:

我为 .NET Web 应用设置了文化,以便为数字、货币和日期使用特定格式:

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("fr-BE");

在装有 IIS 7 的 Windows 2008 服务器机器上,我得到“d/m/yy”作为短日期格式(我想要的)。 在我的(新)Windows 8.1 pro 机器(开发和测试)上,我得到相同 CultureInfo 的“d-m-yy”格式......“破折号”而不是“斜杠”分隔符。

我还在控制面板-> 区域中检查过,法语(比利时)的设置如上所述,W2k8 服务器中的设置与 W8.1pro 中的设置不同...

.NET 版本是 4,没问题。不变的文化没有帮助,因为我需要在 UI 中显示特定的文化并且问题就在那里。确实,Windows 8 带来了变化……最后我曾经覆盖了一些线程文化的设置,比如日期分隔符:

DateTimeFormatInfo dtfi = Thread.CurrentThread.CurrentCulture.DateTimeFormat; if (dtfi.DateSeparator != "/") dtfi.DateSeparator = "/";

这确保斜线在当前线程中始终是日期分隔符。

谢谢。 有人知道吗?比利时改变国家标准?或者,微软为他们做了什么?任何的想法? 谢谢。

【问题讨论】:

  • 他们的 .NET Framework 版本是什么?
  • 如果你想要一个特定的格式,为什么不使用不变的文化?
  • 根据this site格式应该是yyyy-mm-dd

标签: c# .net cultureinfo


【解决方案1】:

感谢您的回答。 .NET 版本是 4,没关系。不变的文化没有帮助,因为我需要在 UI 中显示特定的文化并且问题就在那里。确实,Windows 8 带来了变化…… 最后我用来覆盖线程文化的一些设置,比如日期分隔符: DateTimeFormatInfo dtfi = Thread.CurrentThread.CurrentCulture.DateTimeFormat; if (dtfi.DateSeparator != "/") dtfi.DateSeparator = "/";

这确保斜线在当前线程中始终是日期分隔符。

谢谢。

【讨论】:

    【解决方案2】:

    我正在查看 CultureInfo 'en-NZ' 的类似问题,因为它在不同的 Windows 版本中针对相同的文化设置进行了更改,并导致我的 Web 服务为相同的 CultureInfo 保存了不同的字符串,结果证明是自 .Net Framework 4 起由 Windows 提供,在此之前是 Windows 和 .Net 的组合。

    幸运的是,我可以利用微软推荐的 Invariant 文化,以确保我保存到数据库中的字符串不会因为 Windows 或未来的 .Net Framework 更新而改变。问题是,就我而言,AM\PMDesignator 从 a.m.\p.m. 更改为 AM\PM,并且 Invariant 文化将确保它保存到 AM\PM 我认为它在未来不会改变,但如果我想要它保存到a.m.\p.m.,因为它适用于旧版本的 Windows,不变文化无法做到这一点,我可能需要定义我自己的自定义文化或像你一样覆盖当前文化。

    见other question关于微软指定CultureInof are subject to change without notice

    【讨论】:

      猜你喜欢
      • 2020-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      相关资源
      最近更新 更多