sql >> Database >  >> RDS >> Sqlserver

Waarom is 1899-12-30 de nuldatum in Access / SQL Server in plaats van 31-12?

De compatibiliteit behouden met Lotus 1-2-3 destijds, die een bug had doordat het dacht dat het jaar 1900 een schrikkeljaar was (of deed alsof?).

De uitleg is te lang om te citeren, maar voor de nieuwsgierigheid volgen hier enkele fragmenten.

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

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

1900 was geen schrikkeljaar.

"Het is een fout in Excel!" riep ik uit.

'Nou, niet echt,' zei Ed. "We moesten het op die manier doen omdat we Lotus 123-werkbladen moeten kunnen importeren."

"Dus het is een bug in Lotus 123?"

"Ja, maar waarschijnlijk een opzettelijke. Lotus moest passen in 640K. Dat is niet veel geheugen. Als je 1900 negeert, kun je erachter komen of een bepaald jaar een schrikkeljaar is, gewoon door te kijken of de meest rechtse twee bits zijn nul. Dat is echt snel en gemakkelijk. De Lotus-jongens dachten waarschijnlijk dat het in het verleden niet uitmaakte om ongelijk te hebben. Het lijkt erop dat de Basic-jongens anaal wilden zijn over die twee maanden, dus verhuisden ze de tijdperk een dag terug."

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

In feite is dit aantal één groter dan het werkelijke aantal dagen. Dit komt omdat Excel zich gedraagt ​​alsof de datum 1900-Feb-29 bestond. Het deed het niet. Het jaar 1900 was geen schrikkeljaar (het jaar 2000 is een schrikkeljaar). In Excel is de dag na 1900-Feb-28 1900-Feb-29. In werkelijkheid was de dag na 1900-Feb-28 1900-Mar-1. Dit is geen "fout". Het is inderdaad zo ontworpen. Excel werkt op deze manier omdat het echt een bug was in Lotus 123. Toen Excel werd geïntroduceerd, had 123 bijna de hele markt voor spreadsheetsoftware. Microsoft besloot de bug van Lotus voort te zetten om volledig compatibel te zijn. Gebruikers die zijn overgestapt van 123 naar Excel, hoeven hun gegevens niet te wijzigen. Zolang al uw datums later zijn dan 1900-Mar-1, zou dit geen probleem moeten zijn.



  1. Failover en failback op Amazon RDS

  2. Tips voor het gebruik van SQL Server met Salesforce SOQL

  3. MSSQL Reguliere expressie

  4. Database-ontwerp om on-the-fly tabellen te maken