difference between hours, minutes and seconds

1 次查看(过去 30 天)
Hi!
I have matrix A
M=[8 8 48;8 15 29;9 30 15;9 48 53;9 49 30;9 52 12;9 57 0;10 2 27;10 28 52;11 29 47;11 43 41;11 44 4];
The first column of the matrix indicates hours, the second minutes and the third seconds. I want to calculate the difference between consecutive rows
Eg.
M(2,1:3)-M(1,1:3) = 0 6 41
Can you help me? Thanks

采纳的回答

Star Strider
Star Strider 2017-2-2
See if this does what you want:
M=[8 8 48;8 15 29;9 30 15;9 48 53;9 49 30;9 52 12;9 57 0;10 2 27;10 28 52;11 29 47;11 43 41;11 44 4];
Mdn = datenum([repmat([2017 02 02], size(M,1), 1) M]); % Date Numbers
Mdndif = datevec(diff(Mdn)); % Date Number Differences As Date Vectors
Out = Mdndif(:, 4:end) % Desired Result
Out =
0 6 41
1 14 46
0 18 38
0 0 37
0 2 42
0 4 48
0 5 27
0 26 25
1 0 55
0 13 54
0 0 23

更多回答(2 个)

Jan
Jan 2017-2-2
编辑:Jan 2017-2-2
D = diff(M, [], 1);
DinSec = D * [3600; 60; 1] / 86400; % difference in seconds
S = datevec(DinSec);
Result = M(:, 4:6)

Steven Lord
Steven Lord 2017-2-2
Use a duration object.
% Sample data
M = [ 8 8 48; 8 15 29; 9 30 15; 9 48 53; 9 49 30; 9 52 12; ...
9 57 0; 10 2 27; 10 28 52; 11 29 47; 11 43 41; 11 44 4];
% Convert from numbers to a duration array
dur = duration(M);
% Compute the DIFFerence between the rows of the duration array
Ddur = diff(dur, [], 1);
% Extract the hour, minute, and second data from Ddur
% and store that data in the matrix DM
[DM(:, 1), DM(:, 2), DM(:, 3)] = hms(Ddur);
% Show the result
disp(DM)

类别

Help CenterFile Exchange 中查找有关 Dates and Time 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by