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

17

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

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

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

    
задан Yahya 20.11.2015 в 15:33
источник

2 ответа

13

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

  

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

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

  

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

От MSDN :

  

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

    
ответ дан Jakub Lortz 20.11.2015 в 15:36
источник
27

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

    

ответ дан Joey 20.11.2015 в 15:37
источник