与按名称或LCID使用GetCultureInfo时相比,CultureInfo.GetCultures针对特定区域性返回不同的DateTimeSettings

时间:2018-07-31 15:08:45

标签: .net cultureinfo regional-settings

首先,我编辑区域设置并更改语言环境nl-BE的日期格式以使用yyyy-MM-ddenter image description here

然后在我的ASP.NET代码(Windows 10计算机上为Standard .Net 4.6.1)中,运行以下代码:

CultureInfo.GetCultures(CultureTypes.InstalledWin32Cultures)

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

getcultures returns the modified locale settings

这与我在Windows设置中指定的相同,如上图所示,

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

enter image description here

有人可以向我解释为什么两者之间有区别吗?

也许还有另一个键可以用来确保得到相同的结果吗?

1 个答案:

答案 0 :(得分:2)

CultureInfo类的构造函数具有一个Boolean参数useUserOverride,它指定是否应用为用户配置文件设置的(区域性)设置(转到{ {1}}(在注册表中)

HKEY_CURRENT_USER\Control Panel\International
  

public CultureInfo(int culture) : this(culture, true) {} public CultureInfo(int culture, bool useUserOverride) { // ... }
  一个布尔值,指示是使用用户选择的区域性设置(true)还是使用默认区域性设置(false)。


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

true

这些文化会有所改变。


GetCultureInfo(int culture) 实例化cultures[i] = new CultureInfo(cultureNames[i]); (使用GetCurrentInfoHelper),将CultureInfo传递给false

userUserOverride

这将导致返回retval = new CultureInfo(lcid, false); ,而无需您进行更改。