Я хотел бы преобразовать прошедшее количество секунд в формат HH: MM: SS. Есть ли встроенная функция для этого, или мне нужно написать свои собственные?
Есть ли функция Matlab для преобразования прошедших секунд в формат HH: MM: SS?
Ответ 1
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');
Ответ 2
Я не знаю встроенной функции. Тем не менее, есть SEC2HMS в обмене файлами Matlab. В принципе, это сводится к чему-то вроде
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
Ответ 3
Если вы хотите от исходного второго ввода, просто преобразуйте его в дробную часть дня:
datestr (25/24/3600, 'DD-HH: MM: SS')
ans =
00-00: 00: 25
Просто дает его в течение 25 секунд (как из tic/toc)
Ответ 4
Если вы хотите получить часы, минуты и секунды, так как дубликаты рассмотрят следующую строку кода:
seconds = 5000;
hms = fix(mod(seconds, [0, 3600, 60]) ./ [3600, 60, 1])
hms =
1 23 20
Эта строка кода более чем в 100 раз быстрее, чем использование встроенного datestr funciton.
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 мс.