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

DateTime.ParseExact - почему yy переходит к 2015 году не 1915

Почему .NET предполагает, что из следующего мы подразумеваем год как 2015, а не 1915.

var d = DateTime.ParseExact("20/11/15", "dd/MM/yy", new CultureInfo("en-GB"));

Я думаю, он пробует близость, но есть ли разумное дизайнерское решение?

4b9b3361

Ответ 1

Он использует свойство Calendar.TwoDigitYearMax.

Это свойство позволяет правильно преобразовать двузначный год в 4-значный год. Например, если для этого свойства установлено значение 2029, диапазон 100 лет составляет от 1930 до 2029. Следовательно, двузначное значение 30 интерпретируется как 1930, тогда как двузначное значение 29 интерпретируется как 2029.

Для en-GB значение этого свойства равно 2029. Его можно изменить на панели управления:

Начальное значение этого свойства выводится из настроек в области региональных и языковых параметров панели управления.

Из MSDN:

В операции синтаксического анализа двузначный год, который анализируется с использованием спецификатора пользовательского формата "yy", интерпретируется на основе свойства Calendar.TwoDigitYearMax текущего текущего поставщика данных формата.

Ответ 2

Это системный параметр, который вы можете настроить для своей локали, если хотите:

введите описание изображения здесь