Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Perché 1899-12-30 è la data zero in Access/SQL Server invece del 31/12?

Mantenere la compatibilità con Lotus 1-2-3 in passato, che aveva un bug in quanto pensava che l'anno 1900 fosse un anno bisestile (o fingeva?).

La spiegazione è troppo lunga per essere citata, ma per curiosità, ecco alcuni frammenti.

  • http://blogs.msdn.com/b/ericlippert/archive/2003/09/16/53013.aspx

  • http://www.joelonsoftware.com/items/2006/06/16.html

Il 1900 non è stato un anno bisestile.

"È un bug in Excel!" esclamai.

"Beh, non proprio," disse Ed. "Dovevamo farlo in questo modo perché dobbiamo essere in grado di importare i fogli di lavoro di Lotus 123."

"Quindi, è un bug in Lotus 123?"

"Sì, ma probabilmente intenzionale. Lotus doveva rientrare in 640K. Non c'è molta memoria. Se ignori il 1900, puoi capire se un dato anno è bisestile semplicemente guardando i due bit più a destra sono zero. È davvero facile e veloce. I ragazzi della Lotus probabilmente hanno pensato che non importava sbagliarsi in quei due mesi passati. Sembra che i ragazzi della Basic volessero essere anali su quei due mesi, quindi hanno spostato il epoca un giorno indietro."

  • http://www.cpearson.com/excel/datetime.htm

In realtà, questo numero è maggiore di uno rispetto al numero effettivo di giorni. Questo perché Excel si comporta come se esistesse la data 1900-Feb-29. Io non l'ho fatto. L'anno 1900 non è stato bisestile (l'anno 2000 è bisestile). In Excel, il giorno dopo il 28 febbraio 1900 è il 29 febbraio 1900. In realtà, il giorno dopo il 28 febbraio 1900 era il 1 marzo 1900. Questo non è un "bug". In effetti, è di progettazione. Excel funziona in questo modo perché era davvero un bug in Lotus 123. Quando è stato introdotto Excel, 123 ha quasi l'intero mercato del software per fogli di calcolo. Microsoft ha deciso di continuare il bug di Lotus, al fine di essere completamente compatibile. Gli utenti che sono passati da 123 a Excel non dovrebbero apportare modifiche ai propri dati. Finché tutte le tue date sono successive al 1900-marzo-1, questo non dovrebbe preoccupare.