matlab - 在 Matlab 中将纪元转换为日期

标签 matlab utc epoch

我在 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/

相关文章:

matlab - Matlab 中的局部最大值

Javascript toUTCString 小时数

c++ - 在 C++ 中获取纪元时间(隐式打印的十六进制值)

matlab - 在消息框中显示变量的值

matlab - 在 MATLAB 中从 3 个矩阵中获取坐标最大值

matlab - 如何在 Matlab 中将数据从 1 x 1 双时间序列复制到一维查找表

java - 0001 年 1 月 1 日 Java 和 Javascript 之间的区别 UTC

java - 将 UTC 转换为当前语言环境时间

perl - 如何在 Perl 中将日期转换为纪元时间?

ruby - 从纪元到日期时间的转换不正确