我想找出经过的时间,在函数文件中我编写了这段代码;
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'
有没有办法纠正这个?
答案 0 :(得分:1)
您正在减去字符串,并期望得到这些数字(以字符串的形式)。
如果你这样做,你会发生什么:
>> '3' - '10'
?如果你说答案应该是'-7'
,那么
>> 'a' - 'B'
最易于理解的解决方案是将字符串转换为数字,执行减法,然后转换回字符串:
elapsed = cellfun(@(x,y) ...
num2str(str2double(y)-str2double(x)), ...
d1r, d2r, 'UniformOutput', false);
答案 1 :(得分:1)
如果你正在使用日期/时间戳,你应该考虑使用datenum
和datestr
而不是重新发明日期解析轮:
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
这里的另一个好处是,您可以非常轻松地适应日期格式的变化。您可能还想查看etime
和datevec
函数。