我想将经过的秒数转换为HH:MM:SS格式。是否有内置功能,或者我必须自己编写?
答案 0 :(得分:17)
datestr
可能是您正在寻找的功能。将您的时间间隔表示为一天的小数部分,例如:
>> datestr(0.25, 'HH:MM:SS.FFF')
ans =
06:00:00.000
也就是说,一天中的四分之一是6小时。如果你想以这种方式转换超过一天的间隔,你将不得不调整第二个参数,它格式化函数的输出,例如:
>> datestr(2.256789741, 'DD:HH:MM:SS.FFF')
ans =
02:06:09:46.634
datestr
的第一个参数也可以是日期向量或日期字符串,而不是日期序列号。如果您遇到问题或者编辑此问题,这应该可以帮助您入门。
-
要使用datestr以秒为单位转换时间,请将值除以24 * 60 * 60。
示例:
t1 = toc;
timeString = datestr(t1/(24*60*60), 'DD:HH:MM:SS.FFF');
答案 1 :(得分:7)
我不知道内置函数。但是,Matlab的文件交换中有一个SEC2HMS。基本上,它归结为类似
function [hours, mins, secs] = sec2hms(t)
hours = floor(t / 3600);
t = t - hours * 3600;
mins = floor(t / 60);
secs = t - mins * 60;
end
如果您还希望对其进行格式化,请使用printf
:
function hms = sec2hms(t)
hours = floor(t / 3600);
t = t - hours * 3600;
mins = floor(t / 60);
secs = t - mins * 60;
hms = sprintf('%02d:%02d:%05.2f\n', hours, mins, secs);
end
sec2hms(69.9904)
ans =
00:01:09.99
答案 2 :(得分:5)
如果你想得到小时,分钟和秒作为双打考虑以下代码行:
seconds = 5000;
hms = fix(mod(seconds, [0, 3600, 60]) ./ [3600, 60, 1])
hms =
1 23 20
这行代码比使用内置的datetr函数快100多倍。
nIterations = 10000;
tic
for i = 1:nIterations
hms = fix(mod(seconds, [0, 3600, 60])./[3600, 60, 1]);
end
sprintf('%f ms\r', toc / nIterations * 1000)
给出0.001934毫秒。
tic
for i = 1:nIterations
datestr(seconds/24/3600, 'HH:MM:SS');
end
sprintf('%f ms\r', toc / nIterations * 1000)
给出0.209402 ms。
答案 3 :(得分:4)
如果您想要原始的第二个输入,只需将其转换为当天的一小部分:
datestr(25/24/3600,'DD-HH:MM:SS')
ans =
00-00:00:25
给它25秒(从tic / toc开始)