Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Positive Tageszählung mit Delphi (https://www.delphipraxis.net/142643-positive-tageszaehlung-mit-delphi.html)

Wolfgang Mix 31. Okt 2009 19:08


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:
//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;
Gruß

Wolfgang


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz