[gelöst] UniversalTime to LocalTime

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
kirchfritz
Beiträge: 172
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win10 (L 3.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

[gelöst] UniversalTime to LocalTime

Beitrag von kirchfritz »

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
Zuletzt geändert von kirchfritz am Do 5. Jan 2023, 08:55, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: UniversalTime to LocalTime

Beitrag von theo »


kirchfritz
Beiträge: 172
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win10 (L 3.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

Re: UniversalTime to LocalTime

Beitrag von kirchfritz »

theo hat geschrieben:
Mi 4. Jan 2023, 17:38
Vielleicht hilft das?
https://wiki.lazarus.freepascal.org/PascalTZ
Hilft nicht wirklich weiter. Bietet jedenfalls keine Ansätze um aus meiner Zeichenkette mit "Z" am Ende ein TDateTime zu erstellen.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
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

Beitrag von af0815 »

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
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).

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: UniversalTime to LocalTime

Beitrag von theo »

Einlesen des Strings müsste so gehen:

Code: Alles auswählen

uses DateUtils;
...
dt:=ScanDateTime('yyyymmddhhnnss"Z"','20230104105500Z');  

Benutzeravatar
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

Beitrag von Winni »

Hi!

ScanDateTime ist eine eierlegende Wollmichsau -

aber leider manchmal buggy.

Winni

siro
Beiträge: 732
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: UniversalTime to LocalTime

Beitrag von siro »

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...

kirchfritz
Beiträge: 172
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win10 (L 3.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

Re: UniversalTime to LocalTime

Beitrag von kirchfritz »

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;
               
Bei diesem Vorgehen erhalte ich aber als Uhrzeit 10:55:00 und nicht 11:55:00 !!

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: UniversalTime to LocalTime

Beitrag von theo »

Code: Alles auswählen

uses DateUtils;
...
var dt:TDateTime;
...
  dt:=UniversalTimeToLocal(ScanDateTime('yyyymmddhhnnss"Z"','20230104105500Z'));  
https://www.freepascal.org/docs-html/rt ... local.html

kirchfritz
Beiträge: 172
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win10 (L 3.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

Re: UniversalTime to LocalTime

Beitrag von kirchfritz »

Das scheint die Lösung zu sein.
Danke an alle für die Lösungsfindung!

Antworten