Uhrzeit und Datum regionsunabhängig ausgeben
Jeder, der schon einmal in einem Programm mit Daten und Uhrzeiten gearbeitet hat, kennt das Problem.
Mit den Befehlen
Delphi-Quellcode:
lassen sich so einfach das Datum und die Uhrzeit in einen String schreiben. Mit ein wenig Stringverarbeitung kann man damit dann sogar rechnen.
uhrzeit := TimeToStr(Time);
lokaldatum := DateToStr(Date); Doch auch das Problem ist nicht weit: In Deutschland sind die PCs (normalerweise) so eingestellt, dass die Zeit im 24h-Format als HH:mm:ss und das Datum als TT.MM.JJJJ werden. Doch was ist in anderen Ländern, wo die Zeit mit AM und PM ausgegeben wird? Oder in Ländern, in denen beim Datum keine Nullen geschrieben werden, sodass der Monat plötzlich nur noch eine Stelle hat? Noch schlimmer ist es mit der amerikanischen Zeit. Die Amerikaner verwenden nämlich das 12h-Zeitformat und ein Datum der Form: M/T/JJJJ. Der Monat und der Tag sind also vertauscht und werden zudem noch so kurz wie möglich geschrieben. Der folgende Algorithmus gibt grundsätzlich die aktuelle Zeit im Format HH:mm:ss und das aktuelle Datum im Format TT.MM.JJJJ aus. Völlig unabhängig von der Region. (Beispiel: 08:55:30 17.07.2003) Wenn beim Uhrzeitalgorithmus der Ausgeklammerte Code auch mit verwendet wird, dann wird die Zeit mit Millisekunden angegeben, also im Format HH:mm:ss,sss (Sekunden mit drei Nachkommastellen). Code für die Zeitausgabe: Zuerst einmal müssen die Variable "Uhrzeit" und eine Prozedur deklariert werden:
Delphi-Quellcode:
Anschließend kann diese Prozedur hinzugefügt werden:
uhrzeit: string;
procedure clacTime;
Delphi-Quellcode:
Um jetzt z.B. die Zeit von einem Timer aus über das Label1 anzeigen zu lassen, ist nur noch folgender Code notwendig:
procedure TForm1.calcTime;
var std, min, sec, msec : word; stdstr, minstr, secstr{, msecstr} : string; begin DecodeTime(Time, std, min, sec, msec); stdstr := IntToStr(std); if length(stdstr) < 2 then stdstr := '0' + stdstr; minstr := IntToStr(min); if length(minstr) < 2 then minstr := '0' + minstr; secstr := IntToStr(sec); if length(secstr) < 2 then secstr := '0' + secstr; uhrzeit := stdstr + ':' + minstr + ':' + secstr; {msecstr := IntToStr(msec); Case length(msecstr) of 1: msecstr := '00' + msecstr; 2: msecstr := '0' + msecstr; end; uhrzeit := uhrzeit+','+msecstr;} // Die Klammern entfernen, wenn die Zeit mit Millisekunden ausgegeben werden soll. end;
Delphi-Quellcode:
Code zum Ausgeben des Datums:
clacTime;
Label1.Caption := Uhrzeit; Es müssen erneut ein paar Dinge deklariert werden:
Delphi-Quellcode:
Die Prozedur sieht folgendermaßen aus:
lokalDatum: string;
procedure calcDate;
Delphi-Quellcode:
Die Verwendung ist völlig analog zur Uhrzeit.
procedure TForm1.calcDate;
var jahr, monat, tag : word; jahrstr, monatstr, tagstr : string; begin DecodeDate(Date, jahr, monat, tag); jahrstr := IntToStr(Jahr); Case length(jahrstr) of 1: jahrstr := '000' + jahrstr; 2: jahrstr := '00' + jahrstr; 3: jahrstr := '0' + jahrstr; end; monatstr := IntToStr(monat); if length(monatstr) < 2 then monatstr := '0' + monatstr; tagstr := IntToStr(tag); if length(tagstr) < 2 then tagstr := '0' + tagstr; lokaldatum := tagstr + '.' + monatstr + '.' + jahrstr; end; [edit=Matze]Code formatiert. Mfg, Matze[/edit] |
Re: Uhrzeit und Datum regionsunabhängig ausgeben
Zitat:
Zitat:
Delphi-Quellcode:
Oder habe ich da etwas falsch verstanden?
ShowMessage( FormatDateTime( 'HH:mm:ss dd.mm.yyyy', Now ));
|
Re: Uhrzeit und Datum regionsunabhängig ausgeben
Oder noch einfacher:
Delphi-Quellcode:
Dadurch wird automatisch die Systemeinstellung benutzt.
ShowMessage(FormatDateTime('',Now));
|
Re: Uhrzeit und Datum regionsunabhängig ausgeben
Zitat:
Zitat:
|
Re: Uhrzeit und Datum regionsunabhängig ausgeben
Zitat:
Zitat:
Aber in jedem Fall kommst du mit dem Tipp von Tom besser weg als mit deiner selbstgeschriebenen Funktion. Sorry, is´ aber so. |
Re: Uhrzeit und Datum regionsunabhängig ausgeben
Zitat:
Zitat:
Delphi-Quellcode:
var Termin : TDateTime; // var als Beispiel
... ... := FloatToStr( Termin ); // Ein String zum Speichern Termin := StrToFloatDef( ..., Now ); // Aus String wieder auslesen |
Re: Uhrzeit und Datum regionsunabhängig ausgeben
Also ich würde auch sagen, dass FormatDateTime hier eindeutig der bessere Weg ist, Man kommt damit ja auch problemlos an die entspr. Zahlenwerte, sofern man diese benötigt
z.B.
Delphi-Quellcode:
Allerdings sollten die Trennzeichen im Formatstring immer in " stehen, da diese sonst ersetzt werden können (habe ich schon mehrfach beobachtet!):
Hour := StrToInt(FormatDateTime('hh', Now));
Delphi-Quellcode:
Bei 'mm/dd/yyyy' kann nämlich z.B. '12.31.2002' herauskommen!
DateStr := FormatDateTime('mm"/"dd"/"yyyy', Now)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:20 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