Почему 1753? Что они имеют против 1752 года? Мой пра-пра-пра-пра-пра-прадед был бы очень обижен.
Почему 1753? Что они имеют против 1752 года? Мой пра-пра-пра-пра-пра-прадед был бы очень обижен.
Решение использовать 1 января 1753 ( 1753-01-01
) в качестве минимального значения даты для даты и времени в SQL Server восходит к его источникам Sybase .
Однако значение самой даты можно отнести к этому человеку.
Филипп Стэнхоуп, 4-й граф Честерфилд. Кто руководил Актом о календаре (новый стиль) 1750 года через британский парламент. Это законодательно закрепило принятие григорианского календаря для Британии и ее тогдашних колоний.
В 1752 году в британском календаре было несколько пропущенных дней (ссылка на интернет-архив), когда окончательная корректировка была произведена из юлианского календаря. 3 сентября 1752 года по 13 сентября 1752 года были потеряны.
Кален Делани объяснил свой выбор таким образом
Итак, с потерянными 12 днями, как вы можете вычислить даты? Например, как вы можете вычислить количество дней между 12 октября 1492 года и 4 июля 1776 года? Вы включаете эти пропущенные 12 дней? Чтобы избежать решения этой проблемы, разработчики Sybase SQL Server решили не разрешать даты до 1753 года. Вы можете хранить более ранние даты, используя символьные поля, но вы не можете использовать функции datetime с более ранними датами, которые вы храните в символьных поля.
Однако выбор 1753 года кажется несколько англоцентричным, поскольку многие католические страны в Европе использовали календарь за 170 лет до британской реализации (первоначально отсроченной из-за противодействия со стороны церкви ). И наоборот, многие страны не реформировали свои календари намного позже 1918 года в России. Действительно, Октябрьская революция 1917 года началась 7 ноября по григорианскому календарю.
Оба, datetime
и новый datetime2
тип данных, упомянутый в ответе Джо, не пытаются объяснить эти локальные различия и просто используют григорианский календарь.
Так что с большим диапазоном datetime2
SELECT CONVERT(VARCHAR, DATEADD(DAY,-5,CAST('1752-09-13' AS DATETIME2)),100)
Возвращает
Sep 8 1752 12:00AM
И последнее замечание, касающееся datetime2
типа данных, заключается в том, что в нем используется пролонгированный григорианский календарь, спроецированный назад задолго до того, как он был изобретен, поэтому он имеет ограниченное применение при работе с историческими датами.
Это отличается от других реализаций Программного обеспечения, таких как класс Java григорианского календаря, который по умолчанию следует за юлианским календарем для дат до 4 октября 1582 года, а затем переходит к 15 октября 1582 года в новом григорианском календаре. Он правильно обрабатывает юлианскую модель високосного года до этой даты и григорианскую модель после этой даты. Дата переключения может быть изменена звонящим по телефону setGregorianChange()
.
Довольно увлекательная статья, в которой обсуждаются некоторые особенности с принятием календаря, можно найти здесь .
Ваш пра-пра-пра-пра-пра-дедушка должен перейти на SQL Server 2008 и использовать тип данных DateTime2 , который поддерживает даты в диапазоне от 0001-01-01 до 9999-12-31.
источник
1752 год был годом перехода Британии с юлианского на григорианский календарь. Я полагаю, что две недели в сентябре 1752 года никогда не были результатом, что имеет значение для дат в этой общей области.
Объяснение: http://uneasysilence.com/archive/2007/08/12008/ ( версия интернет-архива )
источник
Это целая история о том, как возникла проблема с датами и как большие СУБД справились с этими проблемами.
Источник 1 и 2
источник
Кстати, Windows больше не знает, как правильно конвертировать UTC в местное время США для определенных дат в марте / апреле или октябре / ноябре прошлых лет. Временные метки на основе UTC от этих дат теперь несколько бессмысленны. Было бы очень странно, если бы ОС просто отказывалась обрабатывать любые метки времени до последнего набора правил DST правительства США, поэтому некоторые из них просто обрабатываются неправильно. SQL Server отказывается обрабатывать даты до 1753 года, потому что для их правильной обработки потребуется много дополнительной специальной логики, и он не хочет обрабатывать их неправильно.
источник