Angenommen, Sie beginnen mit einem Vektor time_unix
, dann:
Anmerkungen:
1) Siehe die Definition der Matlab-Zeit.
2) 8.64e7 ist die Anzahl der Millisekunden an einem Tag.
3) Matlab wendet keine Zeitzonenverschiebung an, daher ist das Ergebnis dieselbe UTC-Zeit.
4) Beispiel für die Rückwärtstransformation:
%Vor%Zusammenfassend gibt es zwei Funktionen:
%Vor%Die Matlab-Zeit hier ist numerisch. Sie können es immer in einen String konvertieren, indem Sie datastr ()
verwendenIch habe den obigen Code versucht, aber die Ergebnisse waren falsch. Ich erkannte, dass der Hauptfehler mit der unangenehmen Definition der Unix-Zeit (Epochenzeit) zusammenhängt. Unix-Zeit (Epochenzeit) ist definiert als die Anzahl der Sekunden nach dem 1.1-1970 , 00h: 00, nicht die Anzahl von ** Milli ** Sekunden ( Ссылка ). Mit dieser Definition sollte die Unix-Zeit daher durch 8.64e5 statt 8.64e7 geteilt werden.
Außerdem scheint datenum('1970', 'yyyy')
nicht zur gewünschten Referenzzeit von 1-1-1970, 00h: 00 zu führen.
Hier ist mein verbesserter Code:
%Vor%Serg's Antwort ist, was ich normalerweise benutze, wenn ich in MATLAB arbeite. Heute wollte ich die Konvertierung zu Datum in MATLAB durchführen, wie der Titel sagt - ohne die im Fragetext angegebene Datumszeichenkonvertierung - und die Datumsnummer aus der Shell ausgeben.
Hier ist, was ich für die abgerundete Datumsnummer festgelegt habe:
%Vor% Dies ist wirklich nur das Bash-Äquivalent von dem, was Sie erwarten würden: 719529 ist das Datum der Epoche (1970-01-01 oder datenum(1970,1,1)
in MATLAB). Ich fummle auch in letzter Zeit durch ksh und es scheint, dass dies dort mit:
Als Nebenübung habe ich den Dezimalteil wieder auf das Datum in bash gesetzt - ich habe mich in ksh nicht gestört, aber es ist nur arithmetisch und geht ähnlich:
%Vor%