【问题标题】:Instances of CultureInfo (from same culture) changing based on OSCultureInfo 的实例(来自相同的文化)基于操作系统而改变
【发布时间】:2013-04-26 15:53:42
【问题描述】:

我有一个这样写日期的网站:

CultureInfo cultureInfo = CultureInfo.GetCultures(CultureTypes.AllCultures).FirstOrDefault(c => string.Equals(c.TwoLetterISOLanguageName, MvcApplication.Language));
return string.Concat(date.Day, ".", cultureInfo.DateTimeFormat.GetAbbreviatedMonthName(date.Month));

在我的 PC(Windows 7,Service Pack 1,西班牙文化)和服务器(Windows Server 2012,英语文化)中,MvcApplication.Language 是 es,所以我从列表中得到的文化是:es-ES .

我希望他们都写相同的字符串(他们有不同的文化,但我没有使用CurrentCulture)。但是结果是我的 PC 中的 abr 和服务器中的 Abr.。

我已经尝试使用LinqPAD 将其与MvcApplication.Language 隔离,但它仍然不同。我已经打印了AbbreviatedDayNames 和AbbreviatedMonthNames 的数组,它们在每台计算机上都不同。

我做错了什么还是这是预期的行为?如何使其完全独立于 Windows / 用户文化?

【问题讨论】:

    标签: c# asp.net-mvc cultureinfo datetime-format culture


    【解决方案1】:

    您可以在 MSDN 的 this link 中看到,文化信息在某些 Windows 版本上可能会有所不同。

    请记住,文化名称和标识符仅代表可以在特定计算机上找到的文化子集。 Windows 版本或服务包可以更改可用的文化。应用程序使用 CultureAndRegionInfoBuilder 类添加自定义文化。用户使用 Microsoft Locale Builder 工具添加自己的自定义文化。 Microsoft Locale Builder 是使用 CultureAndRegionInfoBuilder 类以托管代码编写的。

    如果您希望某些格式是静态的,您可以构建自己的 CultureInfo 对象并自定义其行为,例如设置your own Date Time format

    【讨论】:

      猜你喜欢
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      相关资源
      最近更新 更多