在Matlab中将Epoch转换为Date

Ero*_*rol 9 matlab utc epoch

我在Matlab中有一个Epoch毫秒数组(数组).我想将它们转换为UTC日期时间格式,例如DD-MM-YYYY HH:MM.

是否有预先定义的Matlab方法来执行此操作,还是必须编写自己的函数?

Ser*_*erg 21

假设您从向量开始time_unix,然后:

>> time_unix = 1339116554872; % example time
>> time_reference = datenum('1970', 'yyyy'); 
>> time_matlab = time_reference + time_unix / 8.64e7;
>> time_matlab_string = datestr(time_matlab, 'yyyymmdd HH:MM:SS.FFF')

    time_matlab_string =

    20120608 00:49:14.872
Run Code Online (Sandbox Code Playgroud)

笔记:

1)查看matlab时间的定义.

2)8.64e7是一天中的毫秒数.

3)Matlab不应用任何时区移位,因此结果是相同的UTC时间.

4)向后转换的例子:

>> matlab_time = now;
>> unix_time = round(8.64e7 * (matlab_time - datenum('1970', 'yyyy')))

unix_time =

             1339118367664
Run Code Online (Sandbox Code Playgroud)

总而言之,这里有两个功能:

function tm = unix2matlab(tu)
    tm = datenum('1970', 'yyyy') + tu / 864e5;
end
function tu = matlab2unix(tm)
    tu = round(864e5 * (tm - datenum('1970', 'yyyy')));
end
Run Code Online (Sandbox Code Playgroud)

这里的matlab时间是数字.您始终可以使用datestr()将其转换为字符串

更新纳秒

time_unix_nanos = 1339116554872666666;
millis = round(time_unix_nanos / 1e6);
nanos = time_unix_nanos - 1e6 * millis;
time_matlab = unix2matlab(millis);
s = [datestr(time_matlab, 'yyyymmdd HH:MM:SS.FFF'), num2str(nanos)];

        s =
        20120608 00:49:14.872666666
Run Code Online (Sandbox Code Playgroud)