2013-09-05 61 views
0

我想查出经过的时间,在函数文件中我写了这段代码;混淆cellfun函数的输出

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' 

有没有什么办法来纠正呢?

回答

1

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

你期望发生的,如果你会怎么做:

>> '3' - '10' 

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

>> 'a' - 'B' 

最易于理解的解决方案是将字符串转换成数字,进行加减,并转换回字符串:

elapsed = cellfun(@(x,y) ... 
    num2str(str2double(y)-str2double(x)), ... 
    d1r, d2r, 'UniformOutput', false); 
1

如果你使用日期/时间戳工作,你应该probalby考虑使用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 

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