【问题标题】:Difference between "en-GB" and "en-Us" cultures names“en-GB”和“en-Us”文化名称之间的区别
【发布时间】:2018-12-11 08:46:36
【问题描述】:

当我编写此代码时,日期设置为“12/12/2018 20:08”这样就可以了

{
     var newCulture = new CultureInfo("en-GB");
     var date = (value as DateTime?)?.ToString(newCulture.DateTimeFormat.ShortDatePattern+" HH:mm", CultureInfo.InvariantCulture);
}

但是当我将文化名称更改为“en-Us”时,结果是“12.12.2018 20:08”(我知道的格式不正确)-返回 ShortDatePattern 的日期格式不正确

我在另一个桌面上对其进行了测试,它可以与其中的 2 个一起正常工作。 可能对桌面设置有某种依赖? 为什么日期格式多种多样?

【问题讨论】:

  • 你有什么问题?
  • 在美国,12 和 12 正好相反。
  • 我似乎记得一些奇怪的情况,系统在查找文化时会执行区分大小写的比较,而不是不区分大小写的比较。如果您指定en-US 而不是en-Us,有什么变化吗?您还说有些事情“不正确”,但没有告诉我们您的期望。
  • 1.文化名称区分大小写 - 所以 "en-Us" 应该是 "en-US"。 2. 这两种文化之间的日期和月份是相反的 - GB 是 dd/mm/yyyy,美国是 mm/dd/yyyy
  • 是的,桌面设置很重要。使用控制面板 > 语言 > 更改日期、时间和数字格式。并与某人谈论它,这肯定是为了解决另一个程序的某种问题而改变的。

标签: c# .net datetime datetime-format


【解决方案1】:

new CultureInfo("en-GB") 调用 ctor 并将 useUserOverride 设置为 true。这意味着,如果您的服务器环境与具有自定义设置的指定文化匹配,则将使用这些设置而不是默认设置一次。所以要解决您的问题CultureInfo("en-GB", false);CultureInfo.GetCultureInfo("en-GB")(对于缓存版本)

GetCultureInfo 方法检索缓存的只读 CultureInfo 目的。它提供了比相应的调用更好的性能 CultureInfo.CultureInfo(String) 构造函数。

如果 name 是当前文化的名称,则返回 CultureInfo 对象不反映任何用户覆盖。这使得该方法 适用于没有真实用户的服务器应用程序或工具 系统上的帐户,并且需要加载多种文化 高效。

【讨论】:

    猜你喜欢
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    相关资源
    最近更新 更多