2012-08-31 11 views

Odpowiedz

16

datestr to prawdopodobnie funkcja, której szukasz. Wyraź swój przedział czasu jako ułamek dziesiętny dnia, na przykład:

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

ans = 

06:00:00.000  

Oznacza to, że jedna czwarta dnia to 6 godzin. Jeśli chcesz, aby przekształcić okresy dłuższe niż jeden dzień w ten sposób trzeba będzie dostosować do drugiego argumentu, który formatuje wyjście z funkcji, na przykład:

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

ans = 

02:06:09:46.634 

Pierwszym argumentem datestr może być również albo data vector lub ciąg daty zamiast numeru seryjnego daty. To powinno Ci zacząć, jeśli masz problemy, zadaj inne pytanie lub edytuj to.

-
Aby przekonwertować czas w sekundach za pomocą datestru, podziel wartość przez 24 * 60 * 60.

Próbka:

t1 = toc; 
timeString = datestr(t1/(24*60*60), 'DD:HH:MM:SS.FFF'); 
7

nie wiem wbudowaną funkcję. Istnieje jednak SEC2HMS w programie wymiany plików Matlaba. Zasadniczo sprowadza się do czegoś jak

function [hours, mins, secs] = sec2hms(t) 
    hours = floor(t/3600); 
    t = t - hours * 3600; 
    mins = floor(t/60); 
    secs = t - mins * 60; 
end 

Jeśli też chcesz mieć to sformatowany, użyj 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

Jeśli chcesz z oryginalnego drugiego wejścia, po prostu przekonwertować go na ułamek dnia:

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

ans =

00-00: 00: 25

prostu daje go przez 25 sekund (od tic/TOC)

4

Jeśli chcesz dostać godziny, minuty i sekundy jak debel Rozważmy następujący wiersz kodu:

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

hms = 

1 23 20 

Ta linia kodu jest ponad 100 razy szybciej niż przy użyciu wbudowanego 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) 

podaje 0,001934 ms.

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

daje 0,209402 ms.

Powiązane problemy