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)?
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 ) )
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 )