Подтвердить что ты не робот

Есть ли функция Matlab для преобразования прошедших секунд в формат HH: MM: SS?

Я хотел бы преобразовать прошедшее количество секунд в формат HH: MM: SS. Есть ли встроенная функция для этого, или мне нужно написать свои собственные?

4b9b3361

Ответ 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 мс.