14

経過秒数を HH:MM:SS 形式に変換したいと思います。これには組み込み関数がありますか、それとも自分で作成する必要がありますか?

4

4 に答える 4

17

datestrおそらくあなたが探している機能です。時間間隔を1日の小数で表します。次に例を示します。

>> datestr(0.25, 'HH:MM:SS.FFF')

ans =

06:00:00.000    

つまり、1日の4分の1は6時間です。この方法で1日より長い間隔を変換する場合は、2番目の引数を調整する必要があります。これにより、関数の出力がフォーマットされます。次に例を示します。

>> 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');
于 2012-08-31T07:43:36.847 に答える
7

組み込み関数がわかりません。ただし、Matlab の File Exchange には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
于 2012-08-31T07:49:07.367 に答える
5

時、分、秒を double として取得する場合は、次のコード行を検討してください。

seconds = 5000;
hms = fix(mod(seconds, [0, 3600, 60]) ./ [3600, 60, 1])

hms =

 1    23    20

このコード行は、組み込みの datestr 関数を使用するよりも 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ミリ秒になります。

于 2014-01-20T11:55:51.730 に答える
4

元の 2 番目の入力が必要な場合は、それを 1 日の分数に変換します。

datestr(25/24/3600, 'DD-HH:MM:SS')

ans =

00-00:00:25

25秒間与えるだけです(tic / tocから)

于 2013-03-22T17:42:12.200 に答える