Konvertieren von UNIX-Zeit in menschliche Zeit in MATLAB?

968
Mathmath

Ich habe eine Folge von UNIX-Zeitstempeln in Millisekunden (z. B. 1491009470000). Ich möchte sie in das Format Jahr-Monat-Datum-Stunde-Minute-Sekunde (oder in eine Reihe dieser Komponenten) in menschliche Zeit konvertieren. Nach https://fr.mathworks.com/help/matlab/ref/datestr.html#inputarg_DateNumber versuchte ich datestr: dt = datestr (1491009470000, 'mmmm dd, yyyy HH: MM: SS'), nur um das zu haben Error:

Fehler bei der Verwendung von dateformverify (Zeile 28). DATESTR konnte die Datumsnummer nicht in den Datumsvektor konvertieren. Fehler in datestr (Zeile 194) S = dateformverify (dtnumber, dateformstr, islocal); Verursacht durch: Fehler bei der Verwendung von datevecmx Datumsnummer außerhalb des gültigen Bereichs.

Leider hat datevecmx scheinbar keine Dokumentation in MATLAB 2014a.

Datestr (jetzt 'mmmm dd, jjjj HH: MM: SS.FFF AM') gibt uns jedoch genau das, was wir brauchen. Wie bekomme ich also den Datestr (oder einen anderen MATLAB-Befehl), um uns die menschliche Zeit zu geben? Danke im Voraus!

0
Das Unix-EPOCH ist die Anzahl der Sekunden seit dem 1. Januar 1970, daher müssen Sie der Anzahl MLtime = datenum ('1970', 'yyyy') + 1491009470000 hinzufügen. datestr erwartet die Anzahl in Sekunden, nicht in ms. Teilen Sie sie also zuerst durch 1000 und verwenden Sie die resultierende Zahl als Parameter. arana vor 7 Jahren 1
@ arana: Ich habe folgendes versucht, aber unerwartete Ergebnisse erhalten: epoch = datenum ('1970', 'yyyy'); % Beginn der Unix-Zeit >> Zeit = Epoche + 1491009470000; >> Zeit = Zeit / 1000; >> datestr (time) ans = 30-Mar-2247 12:41:45 Mathmath vor 7 Jahren 0
@ arana: Ich habe auch versucht: Zeit = Epoche + 1491009470; >> datestr (time) ans = 12-Apr-4215. Das Problem ist, dass die Zeiten aus diesem Jahr (2017) stammen, also kriege ich hier was falsch. Welchen Fehler mache ich? Ich glaube, ich bin deinen Vorschlägen gefolgt. Danke noch einmal! Mathmath vor 7 Jahren 0
Was bekommen Sie von datestr (1491009470)? arana vor 7 Jahren 0
@arana: hier: datestr (1491009470) ans = 10-Apr-2245 Mathmath vor 7 Jahren 0
Das Online-Tool für die Konvertierung zeigt, dass 1491009470 3/31/2017, 18:17:50 PM ist. Ihre Zahl enthält also bereits die 1970er-Epoche. In diesem Fall verwenden Sie sie einfach so, wie sie ist: time = 1491009470000/1000; Datum (Zeit), das sollte Ihnen das geben, was Sie erwarten. arana vor 7 Jahren 0
@ arana: tat das, aber datestr (1491009470000/1000 = 1491009470) gibt mir 10-Apr-2245, ein unmögliches Jahr ohne Stunde-Minute-Sekunde. Mathmath vor 7 Jahren 0
Sie haben nicht das 'mmmm dd, jjjj HH: MM: SS') hinzugefügt, aber trotzdem ist das Jahr einfach falsch. Ich habe keine Ideen mehr. Überprüfen Sie dies, es kann Ihnen helfen, https: //www.mathworks. de / matlabcentral / newsreader / view_thread / 285598 arana vor 7 Jahren 1

0 Antworten auf die Frage