Преобразование дат из 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
Неверные даты позволяют легко определить предоставленный формат даты.
Вы должны прочитать документацию компилятора.
И что еще более важно: не используйте двухзначный год, когда это возможно!
Большинство языков / СУБД имеют значения по умолчанию, но позволяют установить столетний перерыв на обычное значение.
Вы должны проверить документацию, если / как это возможно.