У меня есть файлы данных с отметками времени Unix (в этом случае количество миллисекунд с 1 января 1970 года 00:00 по UTC). Я хотел бы преобразовать их в удобные для человека строки даты/времени (например, 31 августа 2012 года 11:36:24) в Matlab. Есть ли простой способ сделать это в Matlab, или мне лучше использовать внешнюю библиотеку (например, java.text.SimpleDateFormat)?
Как работать с отметками времени Unix в Matlab?
Ответ 1
Как насчет
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 ) )
Ответ 2
Более поздние версии MATLAB (проверенные в R2015a) имеют тип datetime, который полезен для работы с датами и временем форматирования. Вы можете преобразовать временные метки UNIX в дату и время MATLAB с помощью
dt = datetime( unix_time, 'ConvertFrom', 'posixtime' );
а затем использовать datestr как прежде для форматирования в виде строки
datestr( dt )