为什么在不同的.NET版本中,DateTimeFormatInfo.GetAllDateTimePatterns返回不同的结果?

3
我正在进行一些与全球化相关的工作,但在项目中遇到了一些奇怪的行为。我使用安装了英语-US语言包的Windows 7操作系统,并且我的应用程序运行在.NET 3.5上。
以下是代码片段:
var culture = new CultureInfo("zh-CN", true);
var formats = culture.GetAllDateTimePatterns('D');

在.NET 4下,返回以下格式:
    yyyy'年'M'月'd'日'
    yyyy'年'M'月'd'日',dddd 
    dddd,yyyy'年'M'月'd'日'

这就是控制面板中日期和时间格式对话框显示的内容(我所追求的)。但在.NET 3.5(以及更早版本)中,返回以下内容:
   yyyy'年'M'月'd'日'
   yyyy-MM-dd
   dddd, yyyy-MM-dd
   dddd, yyyy'年'M'月'd'日'

我查看了使用EnumDateFormatsExEx(以及早期版本)返回的值,并且与.NET 4的结果相匹配。
不同之处并不困扰我;我的问题是为什么结果不同?我认为底层实现正在调用EnumDateFormatsExEx或类似的方法,但是在我启动Ilsyp后,我没有看到任何这样的内容。我想显示与控制面板中相同的列表,因此当格式不同时,我感到惊讶。我认为格式列表应该来自操作系统,并且不会因运行时版本而异。
1个回答

6
.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上运行时可能具有不同的值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接