Matlab:给定参考日期时间将时间戳转换为可读格式

时间:2012-04-11 09:55:33

标签: matlab datetime datetime-format timestamp

我有一个文本文件,其中包含一个摄像头的时间戳,每秒可以捕获50帧。数据如下:

1 20931160389   
2 20931180407
3 20931200603   
4 20931220273   
5 20931240360
.
.
50 20932139319

......等等。

它还提供了捕获的开始时间,如

Date: **02.03.2012 17:57:01**

时间戳以微秒而不是以毫秒为单位,MATLAB只能支持到毫秒,但对我来说还可以。

现在我需要知道每行的这些时间戳的人工格式。比如

1   20931160389     02.03.2012 17:57:01.045  % just an example
2   20931180407     02.03.2012 17:57:01.066
3   20931200603     02.03.2012 17:57:01.083
4   20931220273     02.03.2012 17:57:01.105
5   20931240360     02.03.2012 17:57:01.124

等等

我试过了:

%Refernce Data
clc; format longg
refTime = [2012,03,02,17,57,01];
refNum = datenum(refTime);
refStr = datestr(refNum,'yyyy-mm-dd HH:MM:SS.FFF');

% Processing data
dn = 24*60*60*1000*1000; % Microseconds! I have changed this equation to many options but nothing was helpful
for i = 1 : size(Data,1)
  gzTm = double(Data{i,2}); %timestamps are uint64
  gzTm2 = gzTm / dn;
  gzTm2 = refNum + gzTm2;
  gzNum = datenum(gzTm2);
  gzStr = datestr(gzNum,'yyyy-mm-dd HH:MM:SS.FFF'); % I can't use 'SS.FFFFFF'
  fprintf('i = %d\t Timestamp = %f\t TimeStr = %s\n', i, gzTm, gzStr); 
end;

但我总是有奇怪的输出,比如

i = 1    Timestamp = 20931160389.000000  TimeStr = **2012-03-08 13:29:28.849**
i = 2    Timestamp = 20931180407.000000  TimeStr = **2012-03-08 13:29:29.330**
i = 3    Timestamp = 20931200603.000000  TimeStr = **2012-03-08 13:29:29.815**

输出时间比参考时间晚了/早几个小时。这一天是不同的。

阵列中每个条目之间的时间间隔应该接近20秒......因为我有每秒50帧(1000毫秒/ 50 = 20)..而年,月,日,小时,分钟和秒应该还指出作为参考时间给出的初始时间,因为它大约是几秒前。

我期待的是:

% just an example
1 20931160389 02.03.2012 **17:57:01.045** 
2 20931180407 02.03.2012 **17:57:01.066**

请帮帮我吧!我的错误在哪里?

1 个答案:

答案 0 :(得分:0)

看起来你可以算出记录和第一条记录之间的微秒数:

usecs = double(Data{i,2}) - double(Data{1,2});

将其转换为秒:

secsDiff = usecs / 1e6;

然后将其添加到您计算的初始日期时间:

matDateTime = refNum + secsDiff / (24*60*60);