[gelöst] UniversalTime to LocalTime
-
- Beiträge: 216
- Registriert: Mo 3. Jan 2011, 13:34
- OS, Lazarus, FPC: Win11 (L 3.0 FPC 3.2.2)
- CPU-Target: 64Bit
- Wohnort: Nürnberg
[gelöst] UniversalTime to LocalTime
Hallo,
ich habe den folgenden Zeitstempel als Zeichenkette vorliegen: "20230104105500Z" ("Z" steht für ZULU-Zeit)
Das entspricht nach meinem Kenntnisstand "04.01 2023 11:55:00"
Wie kann ich meine Zeitstempel-Zeichenkette in die für Menschen lesbare Form "04.01 2023 11:55:00" transformieren?
StrToDateTime('20230104105500Z') -----> not a valid dateformat
Irgendwie stehe ich auf dem Schlauch. Kann mir da mal jemand auf die Sprünge helfen?
Fritz
ich habe den folgenden Zeitstempel als Zeichenkette vorliegen: "20230104105500Z" ("Z" steht für ZULU-Zeit)
Das entspricht nach meinem Kenntnisstand "04.01 2023 11:55:00"
Wie kann ich meine Zeitstempel-Zeichenkette in die für Menschen lesbare Form "04.01 2023 11:55:00" transformieren?
StrToDateTime('20230104105500Z') -----> not a valid dateformat
Irgendwie stehe ich auf dem Schlauch. Kann mir da mal jemand auf die Sprünge helfen?
Fritz
Zuletzt geändert von kirchfritz am Do 5. Jan 2023, 08:55, insgesamt 1-mal geändert.
Re: UniversalTime to LocalTime
Vielleicht hilft das?
https://wiki.lazarus.freepascal.org/PascalTZ
https://wiki.lazarus.freepascal.org/PascalTZ
-
- Beiträge: 216
- Registriert: Mo 3. Jan 2011, 13:34
- OS, Lazarus, FPC: Win11 (L 3.0 FPC 3.2.2)
- CPU-Target: 64Bit
- Wohnort: Nürnberg
Re: UniversalTime to LocalTime
Hilft nicht wirklich weiter. Bietet jedenfalls keine Ansätze um aus meiner Zeichenkette mit "Z" am Ende ein TDateTime zu erstellen.theo hat geschrieben: Mi 4. Jan 2023, 17:38 Vielleicht hilft das?
https://wiki.lazarus.freepascal.org/PascalTZ
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: UniversalTime to LocalTime
ZULU ist UTC im Militärsprache.
Das heisst du muss einmal herausfinden ob hinten ein Z steht, Dann kannst du das Z wegmachen und mit UniversalTimeToLocal das Zeitformat wandeln. So einfach ZuluToLocal wirst du nicht finden.
Quote aus https://wiki.lazarus.freepascal.org/PascalTZ
Das heisst du muss einmal herausfinden ob hinten ein Z steht, Dann kannst du das Z wegmachen und mit UniversalTimeToLocal das Zeitformat wandeln. So einfach ZuluToLocal wirst du nicht finden.
Quote aus https://wiki.lazarus.freepascal.org/PascalTZ
LocalTimeToUniversal and UniversalTimeToLocal in the dateutils unit to convert between local time and UTC time
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: UniversalTime to LocalTime
Einlesen des Strings müsste so gehen:
Code: Alles auswählen
uses DateUtils;
...
dt:=ScanDateTime('yyyymmddhhnnss"Z"','20230104105500Z');
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: UniversalTime to LocalTime
Hi!
ScanDateTime ist eine eierlegende Wollmichsau -
aber leider manchmal buggy.
Winni
ScanDateTime ist eine eierlegende Wollmichsau -
aber leider manchmal buggy.
Winni
-
- Beiträge: 759
- Registriert: Di 23. Aug 2016, 14:25
- OS, Lazarus, FPC: Windows 11
- CPU-Target: 64Bit
- Wohnort: Berlin
Re: UniversalTime to LocalTime
wenn der Ausgangsstring immer identisch aussieht, kannst Du es sehr einfach selbst zusammenbasteln:
Code: Alles auswählen
procedure ZULU(var z:String);
var jahr,monat,tag,stunde,minute,sekunde:string;
begin
jahr :=copy(z,1,4);
monat :=copy(z,5,2);
tag :=copy(z,7,2);
stunde :=copy(z,9,2);
minute :=copy(z,11,2);
sekunde:=copy(z,13,2);
z:=tag+'.'+monat+'.'+jahr+' '+stunde+':'+minute+':'+sekunde;
end;
procedure TForm1.FormCreate(Sender: TObject);
var z:string;
begin
z:='20230104105500Z'; // der Ausgangsstring
ZULU(z); // wird umgewandelt
caption:=z; // und ausgegeben
end;
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
-
- Beiträge: 216
- Registriert: Mo 3. Jan 2011, 13:34
- OS, Lazarus, FPC: Win11 (L 3.0 FPC 3.2.2)
- CPU-Target: 64Bit
- Wohnort: Nürnberg
Re: UniversalTime to LocalTime
Bei diesem Vorgehen erhalte ich aber als Uhrzeit 10:55:00 und nicht 11:55:00 !!siro hat geschrieben: Mi 4. Jan 2023, 20:07 wenn der Ausgangsstring immer identisch aussieht, kannst Du es sehr einfach selbst zusammenbasteln:
Code: Alles auswählen
procedure ZULU(var z:String); var jahr,monat,tag,stunde,minute,sekunde:string; begin jahr :=copy(z,1,4); monat :=copy(z,5,2); tag :=copy(z,7,2); stunde :=copy(z,9,2); minute :=copy(z,11,2); sekunde:=copy(z,13,2); z:=tag+'.'+monat+'.'+jahr+' '+stunde+':'+minute+':'+sekunde; end; procedure TForm1.FormCreate(Sender: TObject); var z:string; begin z:='20230104105500Z'; // der Ausgangsstring ZULU(z); // wird umgewandelt caption:=z; // und ausgegeben end;
Re: UniversalTime to LocalTime
Code: Alles auswählen
uses DateUtils;
...
var dt:TDateTime;
...
dt:=UniversalTimeToLocal(ScanDateTime('yyyymmddhhnnss"Z"','20230104105500Z'));
-
- Beiträge: 216
- Registriert: Mo 3. Jan 2011, 13:34
- OS, Lazarus, FPC: Win11 (L 3.0 FPC 3.2.2)
- CPU-Target: 64Bit
- Wohnort: Nürnberg
Re: UniversalTime to LocalTime
Das scheint die Lösung zu sein.
Danke an alle für die Lösungsfindung!
Danke an alle für die Lösungsfindung!