AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi über TJsonTextWriter erzeugten Datetime-Wert korrekt einlesen
Thema durchsuchen
Ansicht
Themen-Optionen

über TJsonTextWriter erzeugten Datetime-Wert korrekt einlesen

Ein Thema von juergen · begonnen am 24. Mai 2024 · letzter Beitrag vom 25. Mai 2024
Antwort Antwort
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#1

über TJsonTextWriter erzeugten Datetime-Wert korrekt einlesen

  Alt 24. Mai 2024, 22:37
Hallo zusammen,

ich schreibe in eine Json-Datei einen TDatetime-Wert.
Delphi-Quellcode:
VAR
  Writer: TJsonTextWriter;
  StringWriter: TStringWriter;
BEGIN
  StringWriter := TStringWriter.Create( );
  Writer := TJsonTextWriter.Create( StringWriter );

  Writer.Formatting := TJsonFormatting.Indented;

  Writer.WriteEndObject;

  Writer.WritePropertyName( 'TimestampFromLastFile' );
  Writer.WriteValue( g_JsonSettingsParams.DatetimeFromLastReadFile.Now() );
  Writer.WriteEndObject;
...
END;
Damit habe ich in der Json-Datei folgenden Wert:
Code:
"2024-05-24T22:13:20.013+02:00"
Dann lese ich den Wert auch wieder aus.
Delphi-Quellcode:
VAR
  my_jsonObj: TJSONObject;
  lDateTime_tmp: TDatetime;
BEGIN
  IF FileExists( frm_ReadPDFFieldsInTable.gs_PathAndFileNameFromSettingJson ) THEN
  BEGIN
    my_jsonObj := TJSONObject.ParseJSONValue( TFile.ReadAllText( ExtractFilePath( ParamStr( 0 ) ) + 'Settings.json', TEncoding.UTF8 { * } ) ) AS TJSONObject;
...
    IF my_jsonObj.TryGetValue<TDateTime>( 'Settings.TimestampFromLastFile', lDateTime_tmp ) THEN
        g_JsonSettingsParams.DatetimeFromLastReadFile := lDateTime_tmp;
...
  END;
END;
...
Wenn ich folgendes verwende, fehlen 2 h.
Memo1.Lines.Add( DateTimeToStr( uReadAndBuildJson.g_JsonSettingsParams.DatetimeFromLastReadFile, TFormatSettings.Invariant ) ); Ergibt den Wert:
Code:
05/24/2024 20:13:20
Wie bekomme ich diesen Wert korrekt ausgelesen?

Vielen Dank schon mal vorab.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)

Geändert von juergen (24. Mai 2024 um 22:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: über TJsonTextWriter erzeugten Datetime-Wert korrekt einlesen

  Alt 24. Mai 2024, 23:58
Eine Möglichkeit wäre:
Delphi-Quellcode:
// IF my_jsonObj.TryGetValue<TDatetime>( 'Settings.TimestampFromLastFile', lDateTime_tmp ) THEN
         IF my_jsonObj.TryGetValue<String>( 'Settings.TimestampFromLastFile', lString_tmp ) THEN
           BEGIN
             g_JsonSettingsParams.DatetimeFromLastReadFile := ISO8601ToDate(lString_tmp , false );
Allerdings fehlen mir jetzt noch die Millisekunden.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)

Geändert von juergen (25. Mai 2024 um 00:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.452 Beiträge
 
Delphi 12 Athens
 
#3

AW: über TJsonTextWriter erzeugten Datetime-Wert korrekt einlesen

  Alt 25. Mai 2024, 00:59
Allerdings fehlen mir jetzt noch die Millisekunden.
Woran siehst du das? Zumindest unter D12.1 funktioniert das:
Delphi-Quellcode:
  var S := '2024-05-24T22:13:20.013+02:00';
  var dt: TDateTime := ISO8601ToDate(S, False);
  S := FormatDateTime('dd/mm/yyyy hh:mm:ss.zzz', dt); // = '24.05.2024 22:13:20.013'
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: über TJsonTextWriter erzeugten Datetime-Wert korrekt einlesen

  Alt 25. Mai 2024, 08:30
Guten Morgen Uwe,

Woran siehst du das?
Ich hatte folgendes für die Darstellung angewendet:

Memo1.Lines.Add( DatetimeToStr( uReadAndBuildJson.g_JsonSettingsParams.DatetimeFromLastReadFile, TFormatSettings.Invariant ) ); Mit deinem Vorschlag funktioniert es. Mir war nicht bewußt, dass DatetimeToStr() das so verkürzt ausgibt.

Memo1.Lines.Add( FormatDatetime('YYYYY-MM-DD HH:NN:SS.zzz', uReadAndBuildJson.g_JsonSettingsParams.DatetimeFromLastReadFile) );
Danke für den Schubs und ein schönes Wochenende!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)

Geändert von juergen (25. Mai 2024 um 09:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#5

AW: über TJsonTextWriter erzeugten Datetime-Wert korrekt einlesen

  Alt 25. Mai 2024, 11:07
Du solltest mal beim FormatSetting reinsehn.
Beim kurzen (HH:MM) und langen Zeitformat (HH:MM:SS) gibt es standardmäßig keine ZZZ
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  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 05:53 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