Allgemeine Tips zum Arbeiten mit Datumswerten (TDateTime)?


Datums-/Zeitwerte werden im Typen TDateTime gespeichert, dieser ist wiederum vom Typ Double. Im ganzzahligen Anteil wird das Datum als die Anzahl der Tage seit dem 30.12.1899 gespeichert. Im Nachkommateil wird die Zeit als Teil eines Tages gespeichert (also entspricht 0.5 z.B. 12:00 h).

Um mit Datumswerten zu Arbeiten kann man die folgenden Funktionen benutzen:

Trunc liefert die Vorkommastellen einer Fließkommazahl, in diesem Fall also den Datumsanteil von TDateTime

Achtung: Trunc liefert einen Integer-Wert zurück, das kann bei großen Werten zu einer Exception führen. Sollte bei TDateTime allerdings nicht vorkommen. Alternativ kann man eine zahl auch so runden: Wert := Wert - Frac(Wert);

Frac liefert den Nachkommateil, also die Zeit

Now liefert das aktuelle Datum und die aktuelle Zeit

DecodeDate wandelt einen TDateTime-Wert in die drei Bestandteile Tag, Monat und Jahr um,
DecodeTime erstellt entsprechend einen Stunden, Minuten und Sekunden -Wert.

EncodeDate wandelt Tag, Monat und Jahr in einen TDateTime-Wert um,
was EncodeTime macht, kann man sich ja denken

DayOfWeek gibt den Wochentag eines Datums als Wert zwischen 1 und 7 zurück (genaueres in der Online-Hilfe)

FomatDateTime erlaubt es, ein Datum nach den eigenen Bedürfnissen als String zu formatieren (genaueres in der Online-Hilfe)

IsLeapYear stellt fest, ob es sich bei einem bestimmten Jahr um ein Schaltjahr handelt

im Unit SysUtils gibt es ein Array MonthDays, welches für normale Jahre und Schaltjahre die Anzahl der Tage pro Monat enthält

IncMonth liefert ein Datum zurück, das um die angegebene Anzahl von Monaten vor oder nach dem Ausgangsdatum liegt

 

Um die Anzahl der Tage zwischen zwei Daten zu ermitteln, brauch man nur die Differenz der ganzzahligen Anteile der Datumswerte zu bilden, denn wie oben schon gesagt handelt es sich bei tDateTime intern um eine Fließkommazahl:

var Datum : TDateTime;
    AnzTage : integer;

Datum := EncodeDate(99,1,1);         {als Beispiel der 1.1.99}
AnzTage := trunc(Now-Datum);        {Now enthält das aktuelle Systemdatum}

Analog kann man die fraktionalen Teile (die Nachkommastellen) der Datumswerte subtrahieren, um eine Zeitdifferenz zu erhalten.

Delphi 1 Delphi 2 Delphi 3 Delphi 4
nicht getestet Version nicht betroffen getestet

siehe auch:

Wie kann ich aus einem Datum die Wochennummer berechnen?
Wie kann ich in meinem Programm ein vierstelliges Jahresdatum anzeigen?


Delphi FAQ