在Matlab中经过的时间,以毫秒为单位,具有不同的日期

时间:2013-05-08 06:21:13

标签: matlab datetime negative-number elapsedtime

我想计算这样的数据的经过时间(以毫秒为单位):

  

START:2013-05-04 23:13:06.188
  结束日期:2013-05-05 1:22:41.617

我无法使用etime(),因为我需要经过的时间(以毫秒为单位)。当我为这样的东西使用for循环时:

[start_i, end_i] = regexp(data{i}, '\d+-\d+-\d+ \d+:\d+:\d+.\d+');
temp_str = data{i};
time{i} = cellstr(temp_str(start_i:end_i));

n1 = datenum(datevec(time{i-1}, 'yyyy-mm-dd HH:MM:SS.FFF'));
n2 = datenum(datevec(time{i}, 'yyyy-mm-dd HH:MM:SS.FFF'));

n = n2 - n1

它出现以下错误:

  

使用dtstr2dtvecmx时出错   将日期字符串转换为日期编号失败。

     

datevec错误(第118行)
              y = dtstr2dtvecmx(t,icu_dtformat);

     

测试错误(第40行)
          n1 = datenum(datevec(时间{i-1},'yyyy-mm-dd HH:MM:SS.FFF'));

如果我像这样使用datevec()

[start_i, end_i] = regexp(data{i}, '\d+:\d+:\d+.\d+');
temp_str = data{i};
time{i} = cellstr(temp_str(start_i:end_i));

t1 = datevec(time{i-1}, 'HH:MM:SS.FFF');
t2 = datevec(time{i}, 'HH:MM:SS.FFF');

t = t2 - t1
datevec(t)

它逐渐减少时间段,逐个元素(秒数秒,分钟数等),有时会给出负数。

我认为应该有一种巧妙的方法来做到这一点,而无需手动修复负值。有人知道怎么做吗?

1 个答案:

答案 0 :(得分:1)

以下内容如何:

%# your data
data = {
    'START: 2013-05-04 23:13:06.188'
    'ENDED: 2013-05-05 1:22:41.617'
};

%# extract date/time strings
s = regexprep(data, '^\w+: ', '');

%# convert to serial date number (in units of days)
t1 = datenum(s{1}, 'yyyy-mm-dd HH:MM:SS.FFF');
t2 = datenum(s{2}, 'yyyy-mm-dd HH:MM:SS.FFF');

%# difference in seconds
diff_sec = (t2-t1) * 24 * 3600