Преобразование дат из YY в YYYY --- как компиляторы / интерпретаторы узнают, как использовать правильный век?

Я просто занимался импортом старой базы данных, и, наблюдая за результатами, я удивлялся, как / почему он знает, как преобразовать 31.12.13 в 31.12.2013, но 31/31 / 99 до 31.12.1999? ("it" в данном случае - функция Python strftime(%Y/%m/%d))

Что происходит в 2050 году? Будет ли запись за 31.12.550 интерпретироваться по умолчанию как 2050, 1950 или 2150?

Я понимаю, что это может варьироваться в зависимости от языка, и что есть, вероятно, флаги / варианты, чтобы специально форсировать использование определенного столетия. Но когда вы явно не делаете этого, что заставляет это суждение вызывать по умолчанию?

3 ответа

Это зависит от базы данных, каждый из которых имеет временной интервал по умолчанию.

Диапазон времени по умолчанию для SQL Server: 1950-2049, так 50 становится 1950, но 49 становится 2049,

В MySQL и Oracle это 1970-2069

В Postgresql это сосредоточено на 2020Таким образом, какой бы год не был ближе к 2020 году, который, кажется, также 1970-2069

Все значения по умолчанию относятся к будущему, и поэтому часто необходимы пользовательские критерии.

Двузначные годы можно перепутать, возьмите 2010-05-07 и измените его на двузначный год, 10-05-07? Нет, должно быть 05-07-10по крайней мере в SQL Server:

SELECT CAST('2010-05-07' AS DATE)  --  2010-05-07
      ,CAST('10-05-07' AS DATE)    --  2007-10-05
      ,CAST('05-07-10' AS DATE)    --  2010-05-07

Неверные даты позволяют легко определить предоставленный формат даты.

Вы должны прочитать документацию компилятора.

И что еще более важно: не используйте двухзначный год, когда это возможно!

Большинство языков / СУБД имеют значения по умолчанию, но позволяют установить столетний перерыв на обычное значение.

Вы должны проверить документацию, если / как это возможно.

Другие вопросы по тегам