Ein Windowsdatum von 0 (nicht NULL) entspricht 31.12.1899. Der 01.01.1900 wäre dann 1.
Bei
Firebird steht aber:
Zitat:
The DATE data type in Dialect 3 stores only date without time. The available range for storing data is from January 01, 1 to December 31, 9999.
Intern sieht das noch etwas anders aus:
Zitat:
In storage, a date value or date-part of a timestamp is represented as the number of days elapsed since date zero — November 17, 1898
kann man auch ganz einfach benutzen um die anzahl der tage seit dem 0 datum zu berechnen
Code:
select current_date-cast('30.12.1899' as date) from rdb$database
ergebnis 45677
die range ist dabei nicht das problem weil der wert ja auch negativ sein kann.
auch das hier geht
Code:
select cast('01.01.0001' as date)-cast('30.12.1899' as date) from rdb$database
ergebnis -693593
Ich finde das verfahren sehr gut gelöst, weil die darstellung sprich umrechnung in tag/monat/jahr ob mit oder ohne schaltjahr unabhängig vom wert ist, der ja nur anzahl tage vor oder hinter 0 darstellt. ich kann mich aus grauer vorzeit noch daran erinnern, das
mysql mit einem datum 30.2. nie probleme hatte, auch wenn das immer unsinn war. mag aber sein, das die das mittlerweile auch anders machen.
und ergänzende infos: als timestamp ist das identisch nur mit nachkommastelle, d.h. mittags um 12 ist plus 0,5 usw. später kam dann auch noch die zeitzone mit in die daten. das die nicht negative jahre vor dem jahr 0 unterstützen kann ich nachvollziehen, das braucht auch nicht jede branche und bis zum enddatum im jahr 9999 haben wir noch circa 3mio tage verfügbar, das sollte für fast alle sinnvollen aufgaben auch reichen. Zumindest aus unserer heutigen sicht