Как работать с метками времени Unix в Matlab?

У меня есть некоторые файлы данных с метками времени Unix (в этом случае количество миллисекунд с 1 января 1970 года 00:00 UTC). Я хотел бы преобразовать их в удобные для человека строки даты/времени (например, 31-Aug-2012 11:36:24) в Matlab. Есть ли простой способ сделать это в Matlab, или мне лучше использовать внешнюю библиотеку (например, java.текст.Класса simpledateformat)?

2 ответов


как о

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

если unix_time дается в секундах,unix_time/86400 даст количество дней с января. 1-е 1970. Добавьте к этому смещение, используемое Matlab datenum (datenum(0000,1,1) == 1), и у вас есть количество дней, начиная с января. 1-м, 0000. Это может быть легко преобразовано в читаемую человеком форму с помощью Matlab datestr.

если у вас есть миллисекунды, просто используйте

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

обернутые в функции, это будет

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

более новые версии MATLAB (проверенные в R2015a) имеют тип datetime, который полезен для работы с датами и временем форматирования. Вы можете преобразовать временные метки UNIX в datetime MATLAB с помощью

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

а затем используйте datestr как и раньше для форматирования в виде строки

datestr( dt )