La decisión de utilizar el 1 de enero de 1753 (1753-01-01
) ya que el valor de fecha mínimo para una fecha y hora en SQL Server se remonta a sus orígenes en Sybase.
Sin embargo, el significado de la fecha en sí se puede atribuir a este hombre.
Philip Stanhope, cuarto conde de Chesterfield. Quien dirigió la Ley del Calendario (Nuevo Estilo) de 1750 a través del Parlamento Británico. Esto legisló para la adopción del calendario gregoriano para Gran Bretaña y sus colonias.
Faltaron algunos días (enlace de archivo de Internet) en el calendario británico en 1752 cuando finalmente se hizo el ajuste del calendario juliano. Se perdieron del 3 de septiembre de 1752 al 13 de septiembre de 1752.
Kalen Delaney explicó la elección de esta manera
Entonces, con 12 días perdidos, ¿cómo puedes calcular las fechas? Por ejemplo, ¿cómo puede calcular el número de días entre el 12 de octubre de 1492 y el 4 de julio de 1776? ¿Incluyes los 12 días que faltan? Para evitar tener que resolver este problema, los desarrolladores originales de Sybase SQL Server decidieron no permitir fechas anteriores a 1753. Puede almacenar fechas anteriores utilizando campos de caracteres, pero no puede utilizar ninguna función de fecha y hora con las fechas anteriores que almacene en campos de caracteres.
Sin embargo, la elección de 1753 parece algo anglocéntrica, ya que muchos países católicos de Europa habían estado usando el calendario durante 170 años antes de la implementación británica (originalmente retrasada debido a la oposición de la iglesia). Por el contrario, muchos países no reformaron sus calendarios hasta mucho más tarde, 1918 en Rusia. De hecho, la Revolución de Octubre de 1917 comenzó el 7 de noviembre según el calendario gregoriano.
Ambos datetime
y el nuevo datetime2
El tipo de datos mencionado en la respuesta de Joe no intenta dar cuenta de estas diferencias locales y simplemente usa el calendario gregoriano.
Entonces, con el mayor rango de datetime2
SELECT CONVERT(VARCHAR, DATEADD(DAY,-5,CAST('1752-09-13' AS DATETIME2)),100)
Devoluciones
Sep 8 1752 12:00AM
Un punto final con el datetime2
El tipo de datos es que utiliza el calendario gregoriano proléptico proyectado hacia atrás mucho antes de que se inventara, por lo que tiene un uso limitado al tratar con fechas históricas.
Esto contrasta con otras implementaciones de software, como la clase de calendario gregoriano de Java, que por defecto sigue el calendario juliano para las fechas hasta el 4 de octubre de 1582 y luego salta al 15 de octubre de 1582 en el nuevo calendario gregoriano. Maneja correctamente el modelo juliano de año bisiesto anterior a esa fecha y el modelo gregoriano posterior a esa fecha. La persona que llama puede cambiar la fecha de transición llamando a setGregorianChange()
.
Puede encontrar un artículo bastante entretenido que analiza algunas peculiaridades más con la adopción del calendario aquí.