¿Por qué 1753? ¿Qué tienen contra 1752? Mi tatara tatara tatara tatara tatarabuelo estaría muy ofendido.
¿Por qué 1753? ¿Qué tienen contra 1752? Mi tatara tatara tatara tatara tatarabuelo estaría muy ofendido.
La decisión de usar el 1 de enero de 1753 ( 1753-01-01
) como el valor de fecha mínimo para una fecha y hora en SQL Server vuelve a sus orígenes Sybase .
Sin embargo, el significado de la fecha en sí puede atribuirse a este hombre.
Philip Stanhope, cuarto conde de Chesterfield. Quién dirigió la Ley de 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.
Hubo algunos días faltantes (enlace de archivo de Internet) en el calendario británico en 1752 cuando el ajuste finalmente se realizó desde el calendario juliano. 3 de septiembre de 1752 al 13 de septiembre de 1752 se perdieron.
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? ¿Incluyen los que faltan 12 días? 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 usar ninguna función de fecha y hora con las fechas anteriores que almacena en caracteres. campos.
Sin embargo, la elección de 1753 parece algo anglocéntrica, ya que muchos países católicos en Europa habían estado usando el calendario durante 170 años antes de la implementación británica (originalmente retrasado 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 bajo el calendario gregoriano.
Ambos datetime
y el nuevo datetime2
tipo de datos mencionado en la respuesta de Joe no intentan explicar estas diferencias locales y simplemente usan 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 último punto con el datetime2
tipo de datos es que utiliza el calendario gregoriano proleptico proyectado hacia atrás mucho antes de que realmente se inventara, por lo que tiene un uso limitado para tratar 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 del año bisiesto antes de esa fecha y el modelo gregoriano después de esa fecha. La persona que llama puede cambiar la fecha de transición llamando setGregorianChange()
.
Aquí puede encontrar un artículo bastante entretenido que discute algunas peculiaridades más con la adopción del calendario .
Su tatara tatara tatara tatara tatarabuelo debería actualizarse a SQL Server 2008 y usar el tipo de datos DateTime2 , que admite fechas en el rango: 0001-01-01 a 9999-12-31.
fuente
1752 fue el año en que Gran Bretaña cambió del calendario juliano al gregoriano. Creo que dos semanas en septiembre de 1752 nunca sucedieron como resultado, lo que tiene implicaciones para las fechas en esa área general.
Una explicación: http://uneasysilence.com/archive/2007/08/12008/ ( versión de Internet Archive )
fuente
Esta es toda la historia de cómo era el problema de la fecha y cómo Big DBMS manejó estos problemas.
Fuente 1 y 2
fuente
Por cierto, Windows ya no sabe cómo convertir correctamente la hora UTC a la hora local de EE. UU. Para ciertas fechas en marzo / abril u octubre / noviembre de años anteriores. Las marcas de tiempo basadas en UTC de esas fechas ahora son algo absurdas. Sería muy asqueroso que el sistema operativo simplemente se negara a manejar las marcas de tiempo antes del último conjunto de reglas de DST del gobierno de los EE. UU., Por lo que simplemente maneja algunas de ellas mal. SQL Server se niega a procesar fechas anteriores a 1753 porque se necesitaría mucha lógica extra especial para manejarlos correctamente y no quiere manejarlos incorrectamente.
fuente