Pourquoi 1753? Qu'ont-ils contre 1752? Mon arrière arrière arrière arrière arrière arrière arrière grand-père serait très offensé.
Pourquoi 1753? Qu'ont-ils contre 1752? Mon arrière arrière arrière arrière arrière arrière arrière grand-père serait très offensé.
La décision d'utiliser le 1er janvier 1753 ( 1753-01-01
) comme valeur de date minimale pour un datetime dans SQL Server remonte à ses origines Sybase .
L'importance de la date elle-même peut être attribuée à cet homme.
Philip Stanhope, 4e comte de Chesterfield. Qui a dirigé le Calendar (New Style) Act 1750 par le Parlement britannique. Cela a légiféré pour l'adoption du calendrier grégorien pour la Grande-Bretagne et ses colonies d'alors.
Il y avait quelques jours manquants (lien vers les archives Internet) dans le calendrier britannique en 1752 lorsque l'ajustement a finalement été effectué à partir du calendrier julien. Du 3 septembre 1752 au 13 septembre 1752 ont été perdus.
Kalen Delaney a expliqué le choix de cette façon
Alors, avec 12 jours perdus, comment calculer les dates? Par exemple, comment calculer le nombre de jours entre le 12 octobre 1492 et le 4 juillet 1776? Incluez-vous ces 12 jours manquants? Pour éviter d'avoir à résoudre ce problème, les développeurs Sybase SQL Server d'origine ont décidé de ne pas autoriser les dates antérieures à 1753. Vous pouvez stocker des dates antérieures en utilisant des champs de caractères, mais vous ne pouvez pas utiliser de fonctions datetime avec les dates antérieures que vous stockez en caractère des champs.
Le choix de 1753 semble cependant quelque peu anglocentrique car de nombreux pays catholiques en Europe utilisaient le calendrier depuis 170 ans avant la mise en œuvre britannique (initialement retardé en raison de l'opposition de l'église ). À l'inverse, de nombreux pays n'ont réformé leur calendrier que bien plus tard, en Russie en 1918. En effet, la révolution d'octobre 1917 a commencé le 7 novembre sous le calendrier grégorien.
Les deux datetime
et le nouveau datetime2
type de données mentionné dans la réponse de Joe n'essaient pas de tenir compte de ces différences locales et utilisent simplement le calendrier grégorien.
Donc, avec la plus grande gamme de datetime2
SELECT CONVERT(VARCHAR, DATEADD(DAY,-5,CAST('1752-09-13' AS DATETIME2)),100)
Retour
Sep 8 1752 12:00AM
Un dernier point avec le datetime2
type de données est qu'il utilise le calendrier grégorien proleptique projeté en arrière bien avant qu'il ne soit réellement inventé et est donc d'une utilité limitée pour traiter les dates historiques.
Cela contraste avec d'autres implémentations logicielles telles que la classe Java Gregorian Calendar , qui suit par défaut le calendrier julien pour les dates jusqu'au 4 octobre 1582, puis passe au 15 octobre 1582 dans le nouveau calendrier grégorien. Il gère correctement le modèle julien de l'année bissextile avant cette date et le modèle grégorien après cette date. La date de basculement peut être modifiée par l'appelant en appelant setGregorianChange()
.
Un article assez divertissant discutant de quelques particularités supplémentaires avec l'adoption du calendrier peut être trouvé ici .
Votre arrière arrière arrière arrière arrière arrière arrière grand-père doit effectuer une mise à niveau vers SQL Server 2008 et utiliser le type de données DateTime2 , qui prend en charge les dates comprises entre 0001-01-01 et 9999-12-31.
la source
1752 fut l'année de la Grande-Bretagne passant du calendrier julien au calendrier grégorien. Je crois que deux semaines en septembre 1752 ne se sont jamais produites en conséquence, ce qui a des implications pour les dates dans ce domaine général.
Une explication: http://uneasysilence.com/archive/2007/08/12008/ ( version Internet Archive )
la source
C'est toute l'histoire du problème de date et de la façon dont les grands SGBD ont géré ces problèmes.
Source 1 et 2
la source
Par ailleurs, Windows ne sait plus comment convertir correctement UTC en heure locale américaine pour certaines dates en mars / avril ou octobre / novembre des années précédentes. Les horodatages basés sur UTC à partir de ces dates sont maintenant quelque peu absurdes. Il serait très compliqué pour le système d'exploitation de simplement refuser de gérer les horodatages avant le dernier ensemble de règles DST du gouvernement américain, il en gère donc simplement certains de manière incorrecte. SQL Server refuse de traiter les dates antérieures à 1753 car il faudrait beaucoup de logique spéciale supplémentaire pour les gérer correctement et il ne veut pas les mal gérer.
la source