我在当前的项目中正在做一些全球化工作,并且遇到了一个奇怪的行为。我在Windows 7上运行,只安装了英文 - 美国版本,而我的应用程序运行在.NET 3.5上。为什么DateTimeFormatInfo.GetAllDateTimePatterns在不同的.NET版本中返回不同的结果?
考虑下面的代码片段:
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
或类似的,但在我启动Ilspy后,我没有看到任何类似的东西。我想要显示出现在控制面板中的相同列表,所以当格式不同时我很惊讶。我认为格式列表将来自操作系统,并且在运行时版本之间没有区别。