Seite 1 von 1

JSON Timestamp

Verfasst: Sa, 02. Jun 2018 11:30
von Jan
Hallo,

ich stelle gerade eine Reihe von Abfragen von XML auf JSON um. Und stoße dabei auf ein abweichendes Datumsformat. Was in XML als überschauliches und einfach auszuwertendes "2018-04-08T17:09:52.149Z" kam, lautet jetzt 1523207392149

Wie rechne ich das mit Standard-Xbase++-Funktionen um?

Jan

Re: JSON Timestamp

Verfasst: Sa, 02. Jun 2018 11:50
von Wolfgang Ciriack
Das sind doch nur die Sekunden seit 1.1.1970 00:00.
Die 149 hinten musst du weglassen.

Re: JSON Timestamp

Verfasst: Sa, 02. Jun 2018 11:53
von Tom
Das ist eine UNIX-Timestamp, nämlich die Zeit in Tausendstelekunden, die seit dem 1. Januar 1970, 00:00 Uhr vergangen ist. Wenn's noch keine gibt, muss man sich eine Umrechnungsfunktion bauen, aber schwierig ist das nicht. Wenn Du nur das Datum brauchst, teilst Du durch 86.400.000, nimmst davon Int() und addierst das auf CToD("01.01.1970"). Ergebnis: 8.4.2018.

Re: JSON Timestamp

Verfasst: Sa, 02. Jun 2018 12:02
von Jan
Hallo Wolfgang und Tom,

Danke für die Hinweise. Da muß man erstmal drauf kommen. Ich hatte danach gegoogelt, aber da hab ich nur JavaScript-Umrechnungen gefunden - mit Funktionsaufrufen, die mir nicht weiterhelfen da in Xbase++ nicht vorhanden.

Und nein, solch eine Umrechnungsfunktion habe ich (noch) nicht. Wobei zwar das Datum am Wichtigsten ist, die Zeit aber auch gut wäre. Mal schauen, was ich da hinbekomme, Ihr hattet ja schon Hinweise gegeben.

Was passiert denn, wenn das Datum VOR dem 01.01.1970 liegt? Soll ja vorkommen ... In dem von mir benötigten Umkreis eher weniger, aber es könnte passieren. Da würde ich dann gerne schon vorher gewappnet sein.

Und was ist mit Schalttagen und Schaltsekunden? Werden die berücksichtigt? Oder einfach stumpf nach Standard-Schema durchgerechnet?

Jan

Re: JSON Timestamp

Verfasst: Sa, 02. Jun 2018 12:08
von Tom
Wenn das Datum vor dem 1.1.70 liegt, ist die Zahl negativ. Schalttage und -jahre interessieren Dich nicht, weil die Substraktionsfunktion von Xbase++, wenn sie auf Datumsvariable angewendet wird, das von alleine macht:

Code: Alles auswählen

FUNCTION JsonDatetimeToXbase(n)
n := Int(n/86400000)
RETURN CtoD("01.01.1970")+n
Falls Du die Zeit noch brauchst, musst Du halt den Rest nehmen (also die Nachkommastellen) und mit SecToTime usw. umrechnen.

Re: JSON Timestamp

Verfasst: Sa, 02. Jun 2018 12:15
von Jan
Hallo Tom,

Danke für die Hinweise zu kleineren Daten und die Schaltdaten. Das macht die Sache ja schon mal wesentlich einfacher.

Danke auch für Deine Formel. Da hab ich aber eine Frage zu: Ich hatte da mal nach gegoogelt, und es gibt stapelweise Umrechnungsfunktionen für Excel. Und da wird dann imemr so gerechnet: nTimestamp / 86400 + 25569. Das machen die Durchgängig in allen Beispielen. Warum machen die das?

Jan

Re: JSON Timestamp

Verfasst: Sa, 02. Jun 2018 12:18
von Tom
Anderes Bezugsdatum, nämlich der 30.12.1899. Das macht aber nur Office so, soweit ich weiß:

https://social.msdn.microsoft.com/Forum ... =accessdev

Re: JSON Timestamp

Verfasst: Sa, 02. Jun 2018 12:20
von Tom
Mit der Zeitberechnung kommst Du aber alleine klar, oder? Du musst den Modulus der Division nehmen und hast dann die Zeit in Mikrosekunden seit Mitternacht. SecToTime() hilft Dir anschließend weiter.

Re: JSON Timestamp

Verfasst: Sa, 02. Jun 2018 12:23
von Jan
Hallo Tom,

ja, jetzt wo ich den Einstieg habe ist der Rest recht einfach. Ich hatte nur keine Ahnung, wie das Teil überhaupt interpretieren. Der Rest ist dann ja logisch nachvollziehbar.

Jan