Я выполняю некоторую работу по глобализации в своем текущем проекте, и я столкнулся с любопытным поведением. Я работаю в 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
или что-то подобное, но после того, как я запустил Ilspy, я не увидел ничего подобного. Я хотел показать тот же список, что и в Панели управления, поэтому был удивлен, когда форматы оказались другими. Я полагал, что список форматов будет исходить от ОС и не будет отличаться между версиями во время выполнения.