2012-08-31 132 views

Respuesta

16

datestr es probablemente la función que está buscando. Exprese su intervalo de tiempo como una fracción decimal de un día, por ejemplo:

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

ans = 

06:00:00.000  

Es decir, una cuarta parte de un día es de 6 horas. Si desea transformar intervalos más largos que un día de esta manera usted tendrá que ajustar el segundo argumento, que da formato a la salida de la función, por ejemplo:

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

ans = 

02:06:09:46.634 

El primer argumento de datestr también podría ser una fecha vector o cadena de fecha en lugar de un número de serie de fecha. Esto debería ayudarlo a comenzar, si tiene problemas, haga otra pregunta o edite esta.

-
Para convertir un tiempo en segundos utilizando fechastr, divida el valor entre 24 * 60 * 60.

muestra:

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

no sé una función incorporada. Sin embargo, hay un SEC2HMS en el Intercambio de archivos de Matlab. Básicamente, todo se reduce a algo así como

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

Si también quieren tener que formatear, utilice un 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

Si desea partir de la segunda entrada original, simplemente convertirlo en una fracción de el día:

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

ans =

00-00: 00: 25

Sólo le da durante 25 segundos (a partir de TIC/TOC)

4

Si desea obtener las horas, minutos y segundos como dobles consideran la siguiente línea de código:

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

hms = 

1 23 20 

Esta línea de código es más de 100 veces más rápido que el uso de la incorporada en el 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) 

da 0.001934 ms.

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

da 0.209402 ms.

Cuestiones relacionadas