0

我想找出经过的时间,在我写了这段代码的函数文件中;

function elapsed = elapsedTime(d1,d2)
%Input d1 = '2010/12/04 12:00:00'
%Input d2 = '2010/12/14 13:06:36'
d1r = regexp(d1,'((/|:)?|[ ])?','split');
d2r = regexp(d2,'((/|:)?|[ ])?','split');
elapsed = cellfun(@minus,d1r,d2r,'UniformOutput',false);
end

输出如下:

ans = 
    [1x4 double]    [1x2 double]    [1x2 double]    [1x2 double]    [1x2 double]    [1x2 double]

这种输出格式不好,因为我不能用它来查找经过的时间!

如果它不提供如下的单元格数组,我如何使用它来将其映射到实际输出:

ans = '0000' '00' '00' '01' '06' '36'

有什么办法可以纠正这个吗?

4

2 回答 2

1

您正在减去字符串,并期望得到数字(以字符串的形式)。

如果您这样做,您期望会发生什么:

>> '3' - '10'

? 如果你说答案应该是'-7',那怎么样

>> 'a' - 'B'

?

最容易理解的解决方案是将字符串转换为数字,进行减法,然后再转换回字符串:

elapsed = cellfun(@(x,y) ...
    num2str(str2double(y)-str2double(x)), ...
    d1r, d2r, 'UniformOutput', false);
于 2013-09-05T16:00:08.767 回答
1

如果您正在使用日期/时间戳,您应该考虑使用datenumdatestr不是重新发明日期解析轮:

function elapsed = elapsedTime(d1,d2)
%Input d1 = '2010/12/04 12:00:00'
%Input d2 = '2010/12/14 13:06:36'
fmt = 'yyyy/mm/dd HH:MM:SS';

elapsed = diff(datevec( [d1;d2], fmt ),1,1)
end

这将返回:

elapsed =

     0     0    10     1     6    36

这里的另一个好处是,您可以很容易地适应日期格式的变化。您可能还想查看etimeanddatevec函数。

于 2013-09-06T07:18:17.003 回答