Reputation: 11
I want to calculate time difference with the previous line, however, the result is not as expected. For example, the result in deltatime(2,5)
(see first screenshot) is supposed to be 3
instead of 13
(17:47-17:44
).
My code:
% Calculate connection time
sizedate = length(date);
for i=2:sizedate
X=char(date(i));
X=[X(1) X(2)];
if(X=='18')
timenum_on=char(time(i));
timenum_b4=char(time(i-1));
if(timenum_on(5)<timenum_b4(5) || timenum_on(1) >=timenum_b4(1)
timenum_on(5)=timenum_on(5)+10;
timenum_on(4)=timenum_on(4)-1;
deltatime(i,")=timenum_on-timenum_b4;
else
timenum_b4(5)=10-timenum_b4(5);
deltatime(i,:)=timenum_on-timenum_b4;
end
Upvotes: 1
Views: 281
Reputation: 158
Try creating this function:
deltatime=func_time(time);
Contents of this function:
function time_diff= func_time(time_arr)
n=size(time_arr(:,1));
y=n(1);
time_diff=zeros(n,n);
for i=1:y
for j=1:y
time_1=time_arr(i,:); %char array of first time
time_2=time_arr(j,:); %char array of second time
time_cell=time_1;
ctr=1;
for k=1:size(time_1(:)+1)
if(time_1(k)==':')
av=str2num(time_1(ctr:(k-1)));
bv=str2num(time_2(ctr:(k-1)));
time_cell(ctr:(k-1))=int2str(av-bv)
ctr=k+1
end
if(k==5)
av=str2num(time_1(ctr:(k)));
bv=str2num(time_2(ctr:(k)));
time_cell(ctr:k)=int2str(av-bv)
end
end
time_diff(i,j)=time_cell();
end
end
Here I am assuming that
deltatime(i,j)
istime(i)-time(j)
Upvotes: 0
Reputation: 24169
Why not simply subtract/diff the datetime
objects directly to get duration
objects? Here's a demonstration:
function out = q48740661
dt = datetime(2017, 02, 12, 17, 43 + (0:4).^2, 12).';
out = flipud(diff(flipud(dt)));
ans =
4×1 duration array
-0:01:00
-0:03:00
-0:05:00
-0:07:00
Upvotes: 1