首页 > 解决方案 > CultureInfo.GetCultures 为特定文化返回不同的 DateTimeSettings,而不是按名称或 LCID 使用 GetCultureInfo

问题描述

首先,我编辑我的区域设置并更改nl-BE要使用的语言环境的日期格式yyyy-MM-dd在此处输入图像描述

然后在我的 ASP.NET 代码(Windows 10 机器上的标准 .Net 4.6.1)中运行以下代码:

CultureInfo.GetCultures(CultureTypes.InstalledWin32Cultures)

其结果是一个包含文化的列表。当我专门查看我更改的语言环境(nl-BE)时,我得到以下结果:

getcultures 返回修改后的区域设置

这与我在 Windows 设置中指定的相同,如上图所示,看起来不错。

如果我在同一应用程序中按名称或 LCID 搜索此特定语言环境,则不会显示此自定义设置:

在此处输入图像描述

有人可以向我解释为什么两者之间存在差异吗?

是否有另一个密钥可以用来确保获得相同的结果?

标签: .netcultureinforegional-settings

解决方案


该类的构造函数CultureInfo有一个Boolean参数,该参数useUserOverride指定是否应用您为用户配置文件设置的(区域)设置HKEY_CURRENT_USER\Control Panel\International位于注册表中)

public CultureInfo(int culture) : this(culture, true) {}

public CultureInfo(int culture, bool useUserOverride) 
{
   // ...
}

useUserOverride:
一个布尔值,表示是使用用户选择的文化设置 (true) 还是默认文化设置 (false)。


CultureInfo.GetCultures(CultureTypes types)(通过)使用(通过构造函数的默认值) CultureData.GetCultures(CultureTypes types)创建实例。true

cultures[i] = new CultureInfo(cultureNames[i]);

所以这些文化有你的变化。


GetCultureInfo(int culture)实例化一个CultureInfo(使用GetCurrentInfoHelper)传递falseuserUserOverride

retval = new CultureInfo(lcid, false);

这会导致CultureInfo没有您的更改而返回。


推荐阅读