![]() |
Delphi -> JSON -> EXCEL für TDateTime
ich schreibe in meine JSON files TDateTime Felder , Ergebnis
Delphi-Quellcode:
Das Json schreibe ich als *.csv und importiere nach Excel.
0 Tage, 0 Stunden, 0 Minuten, 37 Sekunden .
Eigentlich OK, nur kann Excel mit diesem Felder nichts anfangen - es als Zeitdauer erkennen. Ich habe das Feld als Datum noch formatiert. Wie könnte ich das Problem lösen : auf der Delphi Seite TdateTime in einen FloatWert Wandeln und dann exportieren ... gibt es einen eleganteren Weg ? |
AW: Delphi -> JSON -> EXCEL für TDateTime
mach doch mal in Excel solche Cellen mit Zeitangaben, exportier das nach CSV und schau was Excel draus macht. Dann könnte der umgekehrt Weg auch so gehen.
Du könntest aber auch JSON -> XML -> Excel probieren. Bei XML hast du evtl. beim mehr Formatvorgaben. |
AW: Delphi -> JSON -> EXCEL für TDateTime
Liste der Anhänge anzeigen (Anzahl: 1)
Verstehe ich das richtig, dass du willst dass Excel den String "0 Tage, 0 Stunden, 0 Minuten, 37 Sekunden" als Zeit interpretiert? Warum speicherst du die Zeitdauer (
Delphi-Quellcode:
) nicht einfach als Fließkommazahl (z.B. in Sekunden) oder Zeitspanne im ISO8601-Format? Excel kommt mit beidem klar.
TTimeSpan
Beispiel Daten:
Code:
Ergibt nach Import in Excel (mit einer Hilfsspalte):Anhang 55085
[
{ "text": "Hallo Welt", "totalSeconds": 37.0 }, { "text": "Nochmal Hallo", "totalSeconds": 12.5 } ] |
AW: Delphi -> JSON -> EXCEL für TDateTime
mit dieser TMYJSON Klasse als Lösung kann ich keinen sinnvollen Eintrag in meiner *.csv Datei erzeugen
Delphi-Quellcode:
type TMYJSON = class
.... time_1 : TTimespan; time_2 : TTimespan; ..... end; var tick, tock: TDateTime; begin myJSON.Data:= TTimespan.Subtract.( tock, tick ); end; führt zu diesem JSON, Excel Import :
Delphi-Quellcode:
in Excel bekomme ich nur leere Spalten
......"time_1":[262460000],"time_2":[0],.......
|
AW: Delphi -> JSON -> EXCEL für TDateTime
Ich vermute mal,
Delphi-Quellcode:
ist auch ein TTimeSpan?
myJSON.Data
Da
Delphi-Quellcode:
ein record ist, wird es von Delphi als JSON in ein Array seiner Feldwerte dargestellt. Das einzige Feld ist
TTimeSpan
Delphi-Quellcode:
und das ist halt was man sieht.
FTicks
Günther hatte aber empfohlen, die Zeitspanne als Float zu deklarieren und dort die Sekunden zu speichern:
Delphi-Quellcode:
type
TMYJSON = class .... Data: Double; // Zeitspanne in Sekunden .... end; var tick, tock: TDateTime; begin myJSON.Data:= TTimespan.Subtract.( tock, tick ).TotalSeconds; end; |
AW: Delphi -> JSON -> EXCEL für TDateTime
OK, werde ich auch so machen .
bedeutet aber : ich werde wieder meine Datumsdifferent als TDateTime speichern - für die Lesbarkeit im JSON Logfile, und dann das ganze nochmals als Float in Sekunden oder Minuten und in Excel muss ich jedesmal das Feld als Datum formatieren :-( |
AW: Delphi -> JSON -> EXCEL für TDateTime
Du kannst es ja auch mal als ISO8601 String probieren:
Delphi-Quellcode:
... Data: string; // als ISO8601 ... var span: TTimespan.Subtract.( tock, tick ); myJson.Data := Format('P%dDT%dH%dM%1.fS', [span.Days, span.Hours, span.Minutes, span.Seconds + span.Milliseconds/1000]); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 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