Решение использовать 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 года. Можно хранить раньше
даты с использованием символьных полей, но
Вы не можете использовать любые функции даты и времени
с более ранними датами, которые вы храните
в символьных полях.
Выбор 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()
.
Довольно интересную статью, в которой обсуждаются некоторые другие особенности с принятием календаря , можно найти здесь .