Подтвердить что ты не робот

Дата ввода в формате d/mm в TextBox

У меня есть TextBox, связанный с нулевым свойством DateTime.

Я в Австралии, поэтому мне нужны даты, представленные в формате d/mm/yyyy.

В моем окне Windows 7 я могу ввести дату в формате d/mm и правильно преобразовать (например, 1/11 конвертирует до 1 ноября, 13/1 конвертирует в 13 января и т.д.).

В моем окне Windows 8 тот же ввод интерпретируется так, как если бы он был в формате США, поэтому 1/11 конвертируется в 11 января, а 13/1 терпит неудачу (поскольку 13-го месяца нет).

Оба компьютера настроены на использование австралийских форматов, и у меня есть этот код в событии Application.StartUp:

FrameworkElement.LanguageProperty.OverrideMetadata(GetType(FrameworkElement), New FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)))

Binding StringFormat установлен в d/MM/yyyy, и я проверил, что это правильно, также привязывая TextBlock к тому же свойству, у которого его StringFormat установлен в D (формат длинной даты, который дает такие значения, как "Среда, 11 января 2012 года" ).

Есть ли у кого-нибудь идеи?

Обновление: Дальнейшее расследование (см. комментарии ниже) показывает, что это, по-видимому, проблема с тем, что культура Windows AU отличается от Windows 7 по сравнению с Windows 7, что означает, что она интерпретирует даты типа " 1/11 'в формате mm/dd в Windows 8, тогда как в Windows 7 он интерпретирует их в формате dd/mm, чего я ожидаю при использовании культуры en-AU.

4b9b3361

Ответ 1

Так как IetfLanguageTag устарел, считали ли вы вместо него использование свойства Name?

http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.ietflanguagetag.aspx:

Формат тега языка IETF похож на название культуры возвращенный свойством Name, но не идентифицирует культуру однозначно. То есть разные культуры имеют один и тот же тег языка IETF если эти культуры имеют одинаковые языковые характеристики.

Ответ 2

Использование

System.Globalization.DateTimeFormatInfo.CurrentInfo.MonthDayPattern = "dd MMMM";

Будет обновлен текущий формат месяца и дня. MonthDayPattern изменен в Windows Server 2012. Я еще не понял, почему.