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
источник
  • , почему он должен принять 1915 г., а не 2015? ;) –  M.kazem Akhgary 20.11.2015 в 15:35
  • Спецификатор пользовательского формата «yy» использует свойство Calendar.TwoDigitYearMax. «Начальное значение этого свойства происходит из настроек в области региональных и языковых параметров панели управления». –  Tim Schmelter 20.11.2015 в 15:37
  • Почему он предполагает 1915, а не 1815? –  Martijn 20.11.2015 в 17:05
  • @Martijn: Это было бы глупо! Не было компилятора C # для жаккардовых станков в 1815 году ... –  Brian Drummond 20.11.2015 в 22:02
  • @BrianDrummond, в 1915 году не было ни одного :-) –  n0rd 20.11.2015 в 23:21

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
источник
  • Если это было 2029 для en-GB, то он вернется к 2015 году из своей операции ParseExact. –  Powerlord 20.11.2015 в 15:40
  • @Powerlord OP достигает 2015 года, но он действительно хочет 1915 года. –  user1666620 20.11.2015 в 15:42
  • @ user1666620 Любопытно было знать, что послужило основанием для решения CLR сказать 2015 год. –  Yahya 20.11.2015 в 16:20
  • @Yahya: CLR только извлекает настройки из системы. Вы можете изменить его. –  Joey 20.11.2015 в 17:27
27

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

    

ответ дан Joey 20.11.2015 в 15:37
источник
  • Указатель мыши! на мгновение я думал, что мой компьютер замораживается! –  M.kazem Akhgary 20.11.2015 в 15:40
  • Там запутанная смесь языков! –  spender 20.11.2015 в 15:41
  • Я по-прежнему использую немецкий язык (хотя и с форматом даты ISO 8601), но английский как язык пользовательского интерфейса. Я привык к этому ;-) –  Joey 20.11.2015 в 15:42
  • Каждый должен использовать ISO 8601. Все остальное - хаос. –  Arturo Torres Sánchez 20.11.2015 в 21:54
  • Psft ... Я американец ... наш путь всегда прав: P –  Matthew Whited 03.12.2015 в 21:34