Почему DateTimeFormatInfo.GetAllDateTimePatterns возвращает разные результаты в разных версиях .NET? - PullRequest
3 голосов
/ 09 февраля 2012

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

1 Ответ

6 голосов
/ 09 февраля 2012

Соответствующие изменения в .NET 4 задокументированы здесь . Подчеркивая:

Одной из основных функций глобализации .NET Framework 4 является возможность предоставлять самую свежую информацию, где она доступна. Самая старая информация о глобализации, которую предоставит этот выпуск, - это данные, доступные во время доставки и только при работе в Windows до Windows 7. При работе в Windows 7 и более поздних выпусках информация о глобализации будет извлекаться непосредственно из операционной системы, которая означает, что клиенты получат текущую информацию о глобализации при обновлении до новой Windows. Клиенты, работающие под управлением Windows 7 и более поздних версий, увидят унифицированную глобализацию для собственных (Win32) и управляемых (.NET) приложений.

Из-за постоянно меняющегося мира информация о глобализации может изменяться в любое время; разработчики не должны ожидать, что значения свойств глобализации сохранятся между выпусками или даже для одного и того же выпуска .NET Framework. Это не совсем новое поведение для пользователей .NET Framework. Свойства Windows-Only-Cultures, которые поддерживаются начиная с .NET Framework 2, могут иметь разные значения при работе в разных версиях Windows

.
...