Com*_*Cow 3 c# globalization cultureinfo
我在当前项目中做了一些全球化工作,我遇到了一个奇怪的行为.我在Windows 7上运行,只安装了英语 - 美国,我的应用程序在.NET 3.5上运行.
给出以下代码段:
var culture = new CultureInfo("zh-CN", true);
var formats = culture.GetAllDateTimePatterns('D');
Run Code Online (Sandbox Code Playgroud)
在.NET 4下,返回以下格式:
yyyy'?'M'?'d'?'
yyyy'?'M'?'d'?',dddd
dddd,yyyy'?'M'?'d'?'
Run Code Online (Sandbox Code Playgroud)
这是控制面板中的日期和时间格式对话框显示的内容(我的目标).
但是在.NET 3.5(及更早版本)中,返回以下内容:
yyyy'?'M'?'d'?'
yyyy-MM-dd
dddd, yyyy-MM-dd
dddd, yyyy'?'M'?'d'?'
Run Code Online (Sandbox Code Playgroud)
我去检查了使用EnumDateFormatsExEx(和早期版本)返回了什么值,它与.NET 4的结果相匹配.
差异不会打扰我; 我的问题是为什么结果不同?我认为底层实现是在呼唤EnumDateFormatsExEx或类似,但在我解雇了Ilspy后,我没有看到任何类似的东西.我想显示控制面板中显示的相同列表,所以当格式不同时我感到很惊讶.我认为格式列表将来自操作系统,并且在运行时版本之间没有区别.
这里记录了.NET 4中的相关更改.高亮:
.NET Framework 4的主要全球化功能之一是能够提供最新信息.此版本将提供的最早的全球化信息是发货时可用的数据,并且仅在Windows 7之前的Windows上运行时.在Windows 7及更高版本上运行时,将直接从操作系统检索全球化信息,意味着客户在升级到新Windows时将获得当前的全球化信息.运行Windows 7及更高版本的客户将看到本机(Win32)和托管(.NET)应用程序的统一全球化体验.
由于世界不断变化,全球化信息随时都可能发生变化; 开发人员不应期望全球化属性的值在发行版之间或甚至同一版本的.NET Framework中持续存在.这对于.NET Framework用户来说并不是全新的行为.自.NET Framework 2以来支持的Windows-Only-Cultures的属性在不同版本的Windows上运行时可能具有不同的值