Datum und Zeit

Berechnung der Wochennummer aus einem Datum nach DIN 1355

Diese Routine von Christoph Kremer demonstriert die Berechnung der Wochennummer aus einem Datum:


function GetWeekOfYear(Datum:TDateTime):byte;
var
  AYear,
  dummy : word;
  First : TDateTime;
begin
  DecodeDate(Datum+((8-DayOfWeek(Datum)) mod 7)-3, AYear, dummy, dummy);
  First := EncodeDate(AYear, 1, 1);
  Result:=(trunc(Datum-First-3+(DayOfWeek(First)+1) mod 7) div 7)+1;
end;
Bemerkungen zur Berechnung der Wochennummer nach DIN 1355:

Berechnung der deutschen Feiertage

Die Funktion FeiertageBerechnen berechnet alle deutschen Feiertage -sowohl die festen, als auch die beweglichen- für ein vorgegebenes Jahr, dabei werden auch die unterschiedlichen Regelungen in einigen deutschen Bundesländern berücksichtigt. Diese Routine stammt aus meiner TSRCalendar-Komponente.

Datumsformat mit vierstelliger Jahreszahl einstellen

Wie kann ich in meinem Programm einstellen, daß das Datumsformat innerhalb meines Programms (nicht generell unter Windows) in dem Format TT.MM.JJJJ angezeigt wird?

Innerhalb von Delphi und der BDE wird das Jahr immer 4-stellig gespeichert. Nur die Anzeige unterliegt den Windowseinstellungen. Mit dieser Prozedur setzt man nur für die eigene Anwendung das Datumsformat mit vierstelliger Jahreszahl:


procedure SetFourDigitYearFormat;
var
  i : Integer;
begin
  ShortDateFormat:=AnsiUpperCase(ShortDateFormat);
  i:=Pos('YYYY',ShortDateFormat);
  if i < 1 then begin
    i:=Pos('YY',ShortDateFormat);
    if i > 0 then
      Insert('YY',ShortDateFormat,i);
  end;
end; {Peter Haas}

Wie berechnet man die Differenz zwischen zwei Datumswerten?

Ich habe zwei Datumswerte, z.B. das aktuelle Datum und den 01.01.1999. Wie kann ich nun die Anzahl der Tage zwischen diesen beiden Daten berechnen?

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 also die Anzahl der Tage zwischen zwei daten zu ermitteln, brauch man nur die Differenz der ganzzahligen Anteile der Datumswerte zu bilden:


var Datum    : TDateTime;
    AnzTage  : integer;

Datum:=EncodeDate(99,1,1);         {als Beispiel der 1.1.99}
AnzTage:=trunc(Date-Ausleihdatum); {Date enthält das aktuelle Systemdatum}
Analog kann man die fraktionalen Teile der Datumswerte subtrahieren, um eine Zeitdifferenz zu erhalten.