2012-08-31 8 views

答えて

16

datestrおそらくあなたが探している機能です。時間間隔を1日の小数部として表現してください。例:

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

ans = 

06:00:00.000  

つまり、1日のうちの4分の1は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'); 
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 
4

あなたは元の第2の入力から必要な場合は、単にの一部に変換日:

関数datestr(25/24/3600、 'DD-HH:MM:SS')

のANS =

00-00:00:25

ジャスト(TIC/TOCなどから)25秒のためにそれを与える

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.001934msとなります。

tic 
for i = 1:nIterations 
    datestr(seconds/24/3600, 'HH:MM:SS'); 
end 
sprintf('%f ms\r', toc/nIterations * 1000) 

は、0.209402msとなる。

関連する問題