我在 Matlab 中有一个 Epoch 毫秒数组(数字数组)。我想将它们转换为 UTC 日期时间格式,例如 DD-MM-YYYY HH:MM。
是否有预定义的 Matlab 方法来执行此操作,还是我必须编写自己的函数?
最佳答案
假设,您从一个向量 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
注意事项:
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
总结一下,这里有两个函数:
function tm = unix2matlab(tu)
tm = datenum('1970', 'yyyy') + tu / 864e5;
end
function tu = matlab2unix(tm)
tu = round(864e5 * (tm - datenum('1970', 'yyyy')));
end
这里的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
关于matlab - 在 Matlab 中将纪元转换为日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12661862/