Tech-Ecke / Delphi Inhalt / Datum und Zeit

 

     Datum und Zeit

 

   Zeit- und Datumsformat festlegen

Mit folgenden Anweisungen stellt man sicher, dass das anwendungsinterne Zeit- und Datumsformat immer dem des "Deutschsprachigen Raums" entspricht, gleich welche regionalen Formaten in dem ausführenden Windows gesetzt sind. Auch eigene Kreationen sind möglich.

  DateSeparator := '.';
TimeSeparator := ':';
ShortDateFormat := 'dd.mm.yyyy';  
// z.B. 01.01.2000
ShortDateFormat := 'dd.mmm.yyyy';   // z.B. 01.Jan.2000; mmmm Januar; ddd Mo; dddd Montag...
LongTimeFormat := 'hh:nn:ss';

dd = Tag, mm = Monat, yyyy = Jahr
hh = Stunden, nn = Minuten, ss = Sekunden
 

   Aktuelles Datum und/oder Zeit formatiert   ( var d: TDateTime; )

   Showmessage(FormatDateTime('yyyy.mm.dd', Now)); // Jahr.Monat.Tag
Showmessage(FormatDateTime('yyyy-mm-dd', Now)); // Jahr-Monat-Tag
 Showmessage(FormatDateTime('yyyy.mm.dd_hh:nn:ss', Now)); // Jahr.Monat.Tag Stunde:Minute:Sekunde
Showmessage(FormatDateTime('hh:nn:ss,ms', Now)); // Stunde:Minute:Sekunde,Millisekunde
 

   Von Zeit nach String und zurück

Syntax von Zeit und Datum (Datumsformat deutschsprachiger Raum):

TDate -> dd.mm.yyyy        TTime -> hh:mm:ss        TDateTime -> dd.mm.yyyy hh:mm:ss

   Edit1.Text := TimeToStr(TTime);
 Edit1.Text := DateToStr(TDate);
 Edit1.Text := DateTimeToStr(TDateTime);

 TTime := StrToTime('12:00:00');
 TDate := StrToDate('01.01.2000');
 TDateTime := StrToDateTime('01.01.2000 12:00:00')

 

Beispiel: Zeit und Datum ermitteln

   Edit1.Text := TimeToStr(TDateTime(Time)); // gibt die aktuelle Uhrzeit zurück
 
Edit1.Text := DateToStr(TDateTime(Now)); // gibt das aktuelle Datum zurück
 

   Sekunden, Minuten, Stunden und Tage zu TDateTime hinzuzählen und abziehen  ( var d: TDateTime; )

TDateTime ist ein Double Wert und zählt die Tage seit dem 30.12.1899. Wird DateTime um 1 erhöht, so wird ein Tag hinzugezählt.
1 Tag hat 86400 Sekunden, möchte mal also eine Sekunde hinzuzählen, so addiert man dem DateTime (1/86400. Für Minuten (1/1440) und folglich (1/24) für Stunden.  

  d := Now
Showmessage(DateTimeToStr(d +(1/86400)));
// 1 Sekunde zur aktuellen Zeit hinzufügen
Showmessage(DateTimeToStr(d +(1/1440))); // 1 Minute zur aktuellen Zeit hinzufügen
Showmessage(DateTimeToStr(d +(1/24))); // 1 Stunde zur aktuellen Zeit hinzufügen

Showmessage(DateTimeToStr(d +1)); // 1 Tag zum aktuellen Datum hinzufügen
 

   String auf Datumsformat prüfen  ( var d: TDateTime; )

   TryStrToDateTime(Edit1.Text, d); // steht im Editfeld ein gültiges Datumsformat, so ist der Rückgabewert true
 

   Tage zwischen zwei Daten ermitteln ( var x: Integer; )

   x := round(StrToDate('01.01.2000') -TDateTime(Now)); // Beispiel mit Datumsformat deutschsprachiger Raum
 Edit1.Text := IntToStr(x);
 

   Aktuelle Zeit in Sekunden ermitteln

  function GetSeconds: Integer;
 begin
   
Result := StrToInt(copy(TimeToStr(TDateTime(Time)),1,2))*3600
    +StrToInt(copy(TimeToStr(TDateTime(Time)),4,2))*60
    +StrToInt(copy(TimeToStr(TDateTime(Time)),7,2))
 end;
 

   Sekunden in Zeit wandeln

  function SecondsToTime(wSeconds: Word): TDateTime;
 begin
    Result := (1 / 24 / 60 / 60) * wSeconds;
 end;
 

Millisekunden in Zeit.

  Millisekunden := 34562;
Edit1.Text := FormatDateTime('hh:mm:ss', IncMilliSecond(0, Millisekunden)
 

   Zeit zwischen zwei TDateTime's ermitteln  (benötigt DateUtils in Uses)

  var ZeitA, ZeitB: TDateTime; // benötigt DateUtils in Uses

Edit1.Text := IntToStr(hoursBetween(ZeitA, ZeitB)); // Stunden
Edit2.Text := IntToStr(MinutesBetween(ZeitA, ZeitB)); //Minuten
Edit3.Text := IntToStr(SecondsBetween(ZeitA, ZeitB)); // Sekunden

Edit4.Text := IntToStr(MilliSecondsBetweenBetween(ZeitA, ZeitB)); // Millisekunden

 

   Sommerzeit ermitteln (DST - Daylight Saving Time)

Der Code gilt für die Sommerzeitregelung in Deutschland ab dessen Einführung 1980 bis heute. Ab 1996 gilt europaweit (außer Island)  die einheitliche Sommerzeitregelung. Die Sommerzeit startet am letzten Sonntag im März (2:00 Uhr -- > 3:00 Uhr) und endet am letzten Sonntag im Oktober (3:00 Uhr --> 2:00 Uhr).

  function IsSummertime(ADate:TDateTime):boolean;
var
      AYear, AMonth, ADay : word;
      Beginn, Ende : TDateTime;
begin
try
   ADate := trunc(ADate);
   DecodeDate(ADate, AYear, AMonth, ADay);
   if AYear < 1980 then
     
{ Keine Sommerzeit vor 1980 }
      Result := False
   else begin
     
{ Beginn der Sommerzeit: }
      Beginn := EncodeDate(AYear, 3, 31);
      while DayOfWeek(Beginn) <> 1 do
         Beginn := Beginn -1;
        
{ Ende der Sommerzeit: }
      if AYear <= 1995 then
        
{ bis 1995: letzter So im September }
         Ende := EncodeDate(AYear, 9, 30)
      else
       
 { ab 1996: letzter So im Oktober }
         Ende := EncodeDate(AYear, 10, 31);
         while DayOfWeek(Ende) <> 1 do
            Ende := Ende -1;
      Result := (ADate>=Beginn) and (ADate<Ende);
   end;
except
   Result := False;
end;
end;
{IsSummertime}

Quelle: unit SRUtils von Simon Reinhardt

Beispiel:

  if IsSummertime(now) then
   showmessage('es ist Sommerzeit') // DST
else
   showmessage('es ist Winterzeit'); // Normalzeit
 

 

 

Die Option Drucken funktioniert erst ab Netscape V4.0 bzw. I-Explorer 5.0 !

[letzte Aktualisierung 20.01.2015]