JSON Timestamp

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

JSON Timestamp

Beitrag 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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: JSON Timestamp

Beitrag von Wolfgang Ciriack »

Das sind doch nur die Sekunden seit 1.1.1970 00:00.
Die 149 hinten musst du weglassen.
Viele Grüße
Wolfgang
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: JSON Timestamp

Beitrag 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.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: JSON Timestamp

Beitrag 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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: JSON Timestamp

Beitrag 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.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: JSON Timestamp

Beitrag 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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: JSON Timestamp

Beitrag 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
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: JSON Timestamp

Beitrag 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.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: JSON Timestamp

Beitrag 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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten