AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Sonstiges Uhrzeit und Datum regionsunabhängig ausgeben
Thema durchsuchen
Ansicht
Themen-Optionen

Uhrzeit und Datum regionsunabhängig ausgeben

Ein Thema von daniel-volk · begonnen am 17. Jul 2003 · letzter Beitrag vom 19. Jul 2003
Antwort Antwort
daniel-volk

Registriert seit: 16. Jul 2003
170 Beiträge
 
Delphi 6 Enterprise
 
#1

Uhrzeit und Datum regionsunabhängig ausgeben

  Alt 17. Jul 2003, 08:07
Jeder, der schon einmal in einem Programm mit Daten und Uhrzeiten gearbeitet hat, kennt das Problem.
Mit den Befehlen
Delphi-Quellcode:
uhrzeit := TimeToStr(Time);
lokaldatum := DateToStr(Date);
lassen sich so einfach das Datum und die Uhrzeit in einen String schreiben. Mit ein wenig Stringverarbeitung kann man damit dann sogar rechnen.
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:
uhrzeit: string;
procedure clacTime;
Anschließend kann diese Prozedur hinzugefügt werden:
Delphi-Quellcode:
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;
Um jetzt z.B. die Zeit von einem Timer aus über das Label1 anzeigen zu lassen, ist nur noch folgender Code notwendig:
Delphi-Quellcode:
clacTime;
Label1.Caption := Uhrzeit;
Code zum Ausgeben des Datums:
Es müssen erneut ein paar Dinge deklariert werden:
Delphi-Quellcode:
lokalDatum: string;
procedure calcDate;
Die Prozedur sieht folgendermaßen aus:
Delphi-Quellcode:
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;
Die Verwendung ist völlig analog zur Uhrzeit.

[edit=Matze]Code formatiert. Mfg, Matze[/edit]
  Mit Zitat antworten Zitat
Tom

Registriert seit: 7. Jan 2003
318 Beiträge
 
RAD-Studio 2009 Pro
 
#2

Re: Uhrzeit und Datum regionsunabhängig ausgeben

  Alt 17. Jul 2003, 08:34
Zitat von daniel-volk:
Jeder, der schon einmal in einem Programm mit Daten und Uhrzeiten gearbeitet hat, kennt das Problem.
Ich kenne das Problem nicht, da ich Datums- und Zeitangaben als Zahl speicher. Angezeigt bekommt der Anwender diese gemäß seinen Systemeinstellungen.

Zitat:
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)
Wie wäre es mit
ShowMessage( FormatDateTime( 'HH:mm:ss dd.mm.yyyy', Now )); Oder habe ich da etwas falsch verstanden?
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#3

Re: Uhrzeit und Datum regionsunabhängig ausgeben

  Alt 17. Jul 2003, 09:46
Oder noch einfacher:
ShowMessage(FormatDateTime('',Now)); Dadurch wird automatisch die Systemeinstellung benutzt.
  Mit Zitat antworten Zitat
daniel-volk

Registriert seit: 16. Jul 2003
170 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: Uhrzeit und Datum regionsunabhängig ausgeben

  Alt 17. Jul 2003, 13:40
Zitat von Tom:
Wie wäre es mit
Delphi-Quellcode:
 
ShowMessage( FormatDateTime( 'HH:mm:ss dd.mm.yyyy', Now ));
Dazu kann ich leider nichts sagen, da ich diesen Code bis jetzt noch nie verwendet habe. Aber schreib doch einfach mal auf, wie du mit Datum und Zeit (als Zahlen) arbeitest. Es ist immer sinnvoll sein Wissen mitzuteilen!

Zitat von MathiasSimmack:
Oder noch einfacher:
ShowMessage(FormatDateTime('',Now)); Dadurch wird automatisch die Systemeinstellung benutzt.
Hier hast du was falsch verstanden. Wie die Zeit mit den aktuellen Systemeinstellungen ausgegeben wird, das habe ich bereits gesagt. Es geht hier ja gerade darum, dass die Systemeinstellungen unterbunden werden sollen!
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#5

Re: Uhrzeit und Datum regionsunabhängig ausgeben

  Alt 17. Jul 2003, 14:13
Zitat von daniel-volk:
Hier hast du was falsch verstanden. Wie die Zeit mit den aktuellen Systemeinstellungen ausgegeben wird, das habe ich bereits gesagt.
Nicht wirklich. Du hast nur was von landesüblichen Einstellungen erzählt, aber nicht wie man sie auch so ausgibt.

Zitat:
Es geht hier ja gerade darum, dass die Systemeinstellungen unterbunden werden soll.
Warum eigentlich? Der Anwender wird sich doch sicher was dabei gedacht haben, dass er einen bestimmten Stil bevorzugt. Mein Datumsformat sieht bspw. so aus: YY-MM-TT. Macht es einen guten Eindruck, wenn dein Programm das ignoriert und deine bevorzugte Darstellung benutzt?

Aber in jedem Fall kommst du mit dem Tipp von Tom besser weg als mit deiner selbstgeschriebenen Funktion. Sorry, is´ aber so.
  Mit Zitat antworten Zitat
Tom

Registriert seit: 7. Jan 2003
318 Beiträge
 
RAD-Studio 2009 Pro
 
#6

Re: Uhrzeit und Datum regionsunabhängig ausgeben

  Alt 17. Jul 2003, 23:20
Zitat von daniel-volk:
Dazu kann ich leider nichts sagen, da ich diesen Code bis jetzt noch nie verwendet habe.
Dann wird es Zeit.

Zitat:
Aber schreib doch einfach mal auf, wie du mit Datum und Zeit (als Zahlen) arbeitest.
Falls man z.B. Zeitangaben als Strings speichern möchte:
Delphi-Quellcode:
var Termin : TDateTime; // var als Beispiel
...
... := FloatToStr( Termin ); // Ein String zum Speichern
Termin := StrToFloatDef( ..., Now ); // Aus String wieder auslesen
  Mit Zitat antworten Zitat
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#7

Re: Uhrzeit und Datum regionsunabhängig ausgeben

  Alt 19. Jul 2003, 14:49
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.Hour := StrToInt(FormatDateTime('hh', Now)); Allerdings sollten die Trennzeichen im Formatstring immer in " stehen, da diese sonst ersetzt werden können (habe ich schon mehrfach beobachtet!):DateStr := FormatDateTime('mm"/"dd"/"yyyy', Now) Bei 'mm/dd/yyyy' kann nämlich z.B. '12.31.2002' herauskommen!
  Mit Zitat antworten Zitat
Antwort Antwort

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 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