【问题标题】:Elapsed time in Matlab in milliseconds with different datesMatlab 中不同日期的经过时间(以毫秒为单位)
【发布时间】:2013-05-08 06:21:13
【问题描述】:

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

开始时间: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(time{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)

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

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

【问题讨论】:

    标签: matlab datetime negative-number elapsedtime


    【解决方案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
    

    【讨论】:

    • 事实上 datenum 确实接受一个字符串元胞数组,所以你编写了一个矢量化调用:t = datenum(s, 'yyyy-mm-dd HH:MM:SS.FFF')
    猜你喜欢
    • 1970-01-01
    • 2022-11-27
    • 2016-03-15
    • 1970-01-01
    • 2017-05-10
    • 2016-07-07
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多