我有一台Windows计算机,具有以下区域设置:
居住位置:德国,
区域格式:美国,
Windows显示语言:英语,
而一周的第一天是星期一。
这个核心让我在一周的第一天错了。
CultureInfo culture = new CultureInfo("en-US");
var test = culture.DateTimeFormat.FirstDayOfWeek; //'Monday', but should be 'Sunday'
Console.WriteLine(test.ToString());
另一台计算机具有德国语言和格式的区域设置,并返回星期日。
答案 0 :(得分:3)
如果构造器匹配区域性,则将使用本地计算机的设置。可以覆盖。
从CultureInfo(string)文档中:
用户可以选择通过“控制面板”的“区域和语言选项”部分覆盖与Windows当前区域性相关的某些值。例如,用户可以选择以其他格式显示日期或使用区域性默认语言以外的货币。
如果与名称关联的区域性标识符与当前Windows区域性的区域性标识符匹配,则此构造方法将创建一个使用这些替代的CultureInfo对象...
source code表明CultureInfo(string)
在useUserOverride
参数设置为true的情况下调用CultureInfo(string,bool)构造函数。
要忽略本地更改,请使用将useUserOverride
设置为false
的同一构造函数,例如:
var culture = new CultureInfo("en-US",false);
您可以检查CultureInfo.UseUserOverride属性,以查看您获得的CultureInfo
对象是否基于用户替代。
这不是一个不好的设计。在桌面应用程序中,用户期望该应用程序遵守区域设置。