![]() |
über TJsonTextWriter erzeugten Datetime-Wert korrekt einlesen
Hallo zusammen,
ich schreibe in eine Json-Datei einen TDatetime-Wert.
Delphi-Quellcode:
Damit habe ich in der Json-Datei folgenden Wert:
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;
Code:
Dann lese ich den Wert auch wieder aus.
"2024-05-24T22:13:20.013+02:00"
Delphi-Quellcode:
Wenn ich folgendes verwende, fehlen 2 h.
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; ...
Delphi-Quellcode:
Ergibt den Wert:
Memo1.Lines.Add( DateTimeToStr( uReadAndBuildJson.g_JsonSettingsParams.DatetimeFromLastReadFile, TFormatSettings.Invariant ) );
Code:
Wie bekomme ich diesen Wert korrekt ausgelesen?
05/24/2024 20:13:20
Vielen Dank schon mal vorab. |
AW: über TJsonTextWriter erzeugten Datetime-Wert korrekt einlesen
Eine Möglichkeit wäre:
Delphi-Quellcode:
Allerdings fehlen mir jetzt noch die Millisekunden.
// 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 ); |
AW: über TJsonTextWriter erzeugten Datetime-Wert korrekt einlesen
Zitat:
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' |
AW: über TJsonTextWriter erzeugten Datetime-Wert korrekt einlesen
Guten Morgen Uwe,
Zitat:
Delphi-Quellcode:
Mit deinem Vorschlag funktioniert es. Mir war nicht bewußt, dass DatetimeToStr() das so verkürzt ausgibt.
Memo1.Lines.Add( DatetimeToStr( uReadAndBuildJson.g_JsonSettingsParams.DatetimeFromLastReadFile, TFormatSettings.Invariant ) );
Delphi-Quellcode:
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! |
AW: über TJsonTextWriter erzeugten Datetime-Wert korrekt einlesen
Du solltest mal beim FormatSetting reinsehn.
Beim kurzen (HH:MM) und langen Zeitformat (HH:MM:SS) gibt es standardmäßig keine ZZZ :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz