web-dev-qa-db-fra.com

Comment travailler avec les horodatages Unix dans Matlab?

J'ai quelques fichiers de données avec des horodatages Unix (dans ce cas, nombre de millisecondes depuis le 1er janvier 1970 00:00 UTC). Je voudrais les convertir en chaînes de date/heure conviviales (par exemple, 31 août 2012 11:36:24) dans Matlab. Existe-t-il un moyen facile de le faire dans Matlab, ou suis-je mieux d'utiliser une bibliothèque externe (par exemple Java.text.SimpleDateFormat)?

15
robguinness

Que diriez-vous

date = datestr(unix_time/86400 + datenum(1970,1,1))

si unix_time est donné en secondes, unix_time/86400 donnera le nombre de jours depuis le 1er janvier 1970. Ajoutez à cela l'offset utilisé par datenum de Matlab (datenum(0000,1,1) == 1), et vous avez le nombre de jours écoulés depuis le 1er janvier 0000. Cela peut être facilement converti en forme lisible par l'homme par datestr de Matlab.

Si vous avez des millisecondes, utilisez simplement

date = datestr(unix_time/86400/1000 + datenum(1970,1,1))

Enveloppés de fonctions, ceux-ci seraient

function dn = unixtime_to_datenum( unix_time )
    dn = unix_time/86400 + 719529;         %# == datenum(1970,1,1)
end

function dn = unixtime_in_ms_to_datenum( unix_time_ms )
    dn = unix_time_ms/86400000 + 719529;   %# == datenum(1970,1,1)
end

datestr( unixtime_to_datenum( unix_time ) )
31
Rody Oldenhuis

Les versions plus récentes de MATLAB (vérifiées dans R2015a) ont un type datetime qui est utile pour travailler avec et formater les dates et les heures. Vous pouvez convertir les horodatages UNIX en un datetime MATLAB avec

dt = datetime( unix_time, 'ConvertFrom', 'posixtime' );

puis utilisez datestr comme précédemment pour le formatage sous forme de chaîne

datestr( dt )
27
Clark