![]() |
Positive Tageszählung mit Delphi
Fast jede Kalendersoftware, die mit Kalenderfunktionen rechnet, bedient sich daurch,
daß sie Tage ab einem bestimmten Datum aufsteigend durchnumeriert. Die meisten Kalender bedienen sich am Julianischen Tag und dem Julianischen Datum nach der Definition von Scaliger. Er definiert den Tag 0 im Julianischen Kalender mit dem Datum 1.1.4713 12 Uhr mittags v. Chr. Andere Kalender benötigen diesen großen Zeitraum nicht und begnügen sich mit dem Gregorianischen Kalenderbereich ab 15.10.1582 aufwärts oder in noch kleineren Zeiträumen wie z.B. der Windows-Kalender, der sehr bescheidenen Ansprüchen genügt. Ich hatte hier schon einmal gezeigt, wie man einfacher mit dem Gregorianischen Tag und dem Gregorianischen Datum rechnen kann (Gregor(1) = 15.10.1582 usw...). Die Kalenderfunktionen bei Delphi haben dagegen eine eigenwillige Zählweise, die nachstehender Tabelle zu entnehmen ist. Der "Urknall" beginnt bei dem Datum 01.01.0001 mit julianischer Numerierung und wechselt ab 15.10.1582 zur gregorianischen, indem korrekterweise einfach 10 Tage übersprungen werden. Der Tag 1 findet am 31.12.1899 statt, warum auch immer (Delphi 2005, andere Versionen habe ich nicht getestet). Da ich nicht nur in Delphi code, habe ich mir ein paar kleine Routinen geschrieben, die nur mit postiven Tageszahlen arbeiten (DelphiDay und DelphiDayToDate), die nur den ganzzahligen Anteil von TDateTime benutzen. Vielleicht kann das ja jemand von Euch außer mir auch noch gebrauchen. Datum___________Delphi-Tagesnr.____________Neue Tagesnr. ________________DelphiNumberOrg____________DelphiN umber 01.01.0001______-693593________________________________1 04.10.1582______-115869___________________________577725 15.10.1582______-115858___________________________577736 29.12.1899___________-1___________________________693593 30.12.1899____________0___________________________ 693594 31.12.1899____________1___________________________ 693595 01.01.2000_______365526___________________________ 730120 31.12.9999______2958465__________________________3 652059
Delphi-Quellcode:
Gruß
//Wolfgang Mix - Delphi-PRAXiS
//Delphi day number function DelphiDayOrg(d,m,yyyy:word):longint; var tmp:TDateTime; Begin Tmp:=Encodedate(yyyy,m,d); result:=round(tmp-StrTodate('30.12.1899')); end; //Wolfgang Mix - Delphi-PRAXiS //Returns positive Delphi day number function DelphiDay(d,m,yyyy:word):longint; var tmp:TDateTime; Begin Tmp:=Encodedate(yyyy,m,d); result:=1+round(tmp-StrTodate('01.01.0001')); end; //Wolfgang Mix - Delphi-PRAXiS //Returns Delphi day number as date function DelphiDayOrgToDate(n:longint):TDate; Begin If (n>=-693593) and (n<=2958465) then result:=n else raise Exception.CreateFmt('Invalid day number',[result]); end; //Wolfgang Mix - Delphi-PRAXiS //Returns new positive day number as date function DelphiDayToDate(n:longint):TDate; Begin If (n>=1) and (n<=3652059) then result:=n-693594 else raise Exception.CreateFmt('Invalid day number',[result]); end; Wolfgang |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz