CultureInfo 的实例(来自相同的文化)基于操作系统而改变

Posted

技术标签:

【中文标题】CultureInfo 的实例(来自相同的文化)基于操作系统而改变【英文标题】:Instances of CultureInfo (from same culture) changing based on OS 【发布时间】: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.Languagees,所以我从列表中得到的文化是:es-ES .

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于CultureInfo 的实例(来自相同的文化)基于操作系统而改变的主要内容,如果未能解决你的问题,请参考以下文章

.net mvc 日期文化问题

如何从 .NET 中的 CultureInfo 获取 ISO 3166 国家代码

.NET 3.5 中的 CultureInfo 类支持哪些文化?

如何找出 Web 项目中支持哪些文化 -> 类 CultureInfo?

Win8 和 Win7 在同一文化上有不同的 CultureInfo 吗? (不同的日期分隔符)

在.net应用程序cultureInfo中覆盖数字格式