在Matlab中用小数秒将纪元转换为日期

时间:2019-02-01 02:43:18

标签: matlab epoch

我有一个包含小数(纳秒)的大纪元时间数组。我已经审查过Converting Epoch to Date in Matlab,但仍然似乎无法将其转换为正确的日期。我一定想念一些简单的东西。

示例数据: 1548348497.191261

我正在使用上面链接中的代码。

time_unix_nanos = 1548348497.191261;
millis = round(time_unix_nanos);
nanos = time_unix_nanos - 1e6 * millis;
time_matlab = round(864e5 * (millis - datenum('1970', 'yyyy')));
s = [datestr(time_matlab, 'yyyy-mm-dd hh:mm:ss.FFF;), num2str(nanos)];

fprintf('s: = %f\n',s);

两个所需的输出 完整日期格式:yyyy-mm-dd HH:mm:ss.SSS 只是时间格式:HH:mm:ss.SSS

谢谢!

1 个答案:

答案 0 :(得分:1)

您似乎误以为将unixtime转换为matlab时间而将matlab时间转换为unixtime。

time_unix_nanos = 1548348497.191261;
millis = round(time_unix_nanos / 1e6);  % You had also a /1e6 missing here
nanos = time_unix_nanos - 1e6 * millis;
% The following line converts unix time to matlab time. The line you used was doing the opposite
time_matlab = datenum('1970', 'yyyy') + millis / 864e5;

% First desired date format
s1 = [datestr(time_matlab, 'yyyymmdd HH:MM:SS.FFF;'), num2str(nanos)]
% Second desired date format
s2 = [datestr(time_matlab, 'HH:MM:SS.FFF;'), num2str(nanos)]

给予

>> s1
    '19700101 00:00:01.548;348497.1913'


>> s2
    '00:00:01.548;348497.1913'