2010-09-06 5 views

Respuesta

35
(end - start)/1000000 

1 microsegundo = 1000 nanosegundos

1 milisegundo = 1000 microsegundos

señalar, que el resultado se redondeará a la baja, pero por lo general no obtenemos cierto precisión de nanosegundos (de todas formas la precisión depende del sistema operativo). Desde el Javadoc en nanoTime():

Este método proporciona una precisión de nanosegundos, pero no necesariamente nanosegundo precisión.

+6

Y por las dudas ... Precisión significa aproximadamente el número de decimales (el número 1.00000000000135738 tiene mucha precisión) mientras que la precisión dice algo acerca de cuántos de esos decimales son los correctos. Por ejemplo, 1.0001 con una precisión de 0.01 podría estar entre 1.0101 y 0.9901, mientras que 1.0 con una precisión de 0.000001 está garantizado entre 0.000009 y 1.000001 –

+2

que funciona, pero el número que devuelve es como 10 o 5 en lugar de 10.234234234 o algo. ¿Tengo que lanzar? – Blankman

+1

@Blankman: si quieres obtener un número como 10.234234234, puede usar '(fin-inicio)/(doble) 1000000' (o' (fin-inicio)/1000000', o '(fin-inicio)/(flotar) 1000000' si quiere flotar) –

0

Puede usar System.currentTimeMillis().

Advertencia:

Tenga en cuenta que mientras que la unidad de tiempo del valor de retorno es una milésima de segundo, la granularidad del valor depende del sistema operativo subyacente y puede ser mayor. Por ejemplo, muchos sistemas operativos miden el tiempo en unidades de decenas de milisegundos.

1

Para obtener un resultado significativo:

void procedure (...) 
{ 
    ... 
} 

double measureProcedure (double epsilon , ...) 
{ 
    double mean ; 
    double stderr = 2 * epsilon ; 
    while (stderr > epsilon) 
    { 
     long start = System.nanoTime(); 
     procedure (...) ; 
     long end = System.nanoTime(); 
     // recalculate mean , stderr 
    } 
    return (mean/1000000) ; 
} 
8

También tenga en cuenta que puede utilizar la clase TimeUnit para ayudar a la conversión. Con versiones anteriores de Java, el código siguiente podría ser un ejemplo para transformar un tiempo de procesamiento en algún otro formato de hora:

long startTime = System.nanoTime(); 

//Processing in-between. 

long endTime = System.nanoTime(); 
long duration = endTime - startTime; 
duration = TimeUnit.SECONDS.convert(duration, TimeUnit.NANOSECONDS); 

Tenga en cuenta que las nuevas versiones de Java tienen accesos directos en la clase TimeUnit.

La muestra anterior convertirá nanosegundos en segundos. También tenga en cuenta que esto lo trunca, por lo que pierde cierta precisión. Por lo tanto, si cambia a minutos, perderá la precisión de segundos. Si desea obtener un resultado de "12 minutos y 32 segundos", entonces deberá realizar un procesamiento adicional con esta solución.

1
TimeUnit.NANOSECONDS.toMillis(end - start); 

¡Eso es todo!

Cuestiones relacionadas