nazzwin
nazzwin

Reputation: 11

Calculate Difference of Timestamps

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).

enter image description here enter image description here

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

Answers (2)

Pranav Totala
Pranav Totala

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) is time(i)-time(j)

Upvotes: 0

Dev-iL
Dev-iL

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

Related Questions