2011-07-01 15 views
5

Estoy desarrollando un sistema que a menudo usa la hora del sistema porque la interfaz Delayed.En Java, ¿cuál es la forma más rápida de obtener la hora del sistema?

¿Cuál es la mejor manera de obtener el tiempo del sistema?

Actualmente estoy usando Calendar.getInstance().getTimeInMillis() cada vez que necesito obtener el tiempo, pero no sé si hay una manera más rápida.

+0

donde usas el tiempo millis con DelayQueue? – Bozho

+0

No estaba claro, solo uso en la clase que implementa la interfaz Retrasada en el método 'getDelay()'. –

+0

@Renato, Calendar.getInstance() y new Date() ambos usan System.currentTimeMillis(); sin embargo, Calendar es de lejos el más lento. –

Respuesta

17

System.currentTimeMillis()
"devuelve la hora actual en milisegundos".
Use esto para obtener la hora actual del sistema.

System.nanoTime().
"El valor devuelto representa nanosegundos desde algún tiempo, pero origen fijo arbitrario"
Uso esto se le está midiendo lapsos de tiempo/eventos.

+2

Tenga en cuenta que los dos métodos tienen diferentes características y debe elegir el adecuado para lo que necesita. –

+0

Hasta donde yo sé, DelayQueue usa TimeUnit.NANOSECONDS usa para hacer los cálculos de tiempo, así que tal vez 'System.nanoTime()' es más adecuado en este caso para evitar tener que convertir a la unidad en el método getDelay() '. –

+0

Puedes usar cualquier unidad allí, así que cualquiera de las dos funciona. nanoTime es más preciso – Bozho

1

System.currentTimeMillis() probablemente.

+0

es actualTimeMillis – Bozho

+1

sí, lo corregí, pero fuiste más rápido;) – kukudas

1
System.currentTimeMillis 

es la respuesta simple

1

long timeMilliSec = System.currentTimeMillis();

1

Para el número de pedido grande, creo que debe haber un hilo a cargo de la actualización de la hora actual del sistema avoing cada hilo haciéndolo de forma independiente.

+0

Es cierto, pero todos los sistemas operativos que he visto tienden a hacer eso por ti – Rhumborl

0

En respuesta corta, System.currentTimeMillis() es más rápido.

@Test 
public void testSystemCurrentTime() { 
    final Stopwatch stopwatch = Stopwatch.createStarted(); 
    for (int i = 0; i < 1_00_000; i++) { 
     System.currentTimeMillis(); 
    } 
    stopwatch.stop(); 
    System.out.println("System.currentTimeMillis(): " + stopwatch); 
} 

@Test 
public void testDateTime() { 
    final Stopwatch stopwatch = Stopwatch.createStarted(); 
    for (int i = 0; i < 1_00_000; i++) { 
     (new Date()).getTime(); 
    } 
    stopwatch.stop(); 
    System.out.println("(new Date()).getTime(): " + stopwatch); 
} 

@Test 
public void testCalendarTime() { 
    final Stopwatch stopwatch = Stopwatch.createStarted(); 
    for (int i = 0; i < 1_00_000; i++) { 
     Calendar.getInstance().getTimeInMillis(); 
    } 
    stopwatch.stop(); 
    System.out.println("Calendar.getInstance().getTimeInMillis(): " + stopwatch); 
} 

me encontré por encima de los casos de prueba y me encontré siguiente resultado:

System.currentTimeMillis(): 5.208 ms (new Date()).getTime(): 19.57 ms Calendar.getInstance().getTimeInMillis(): 148.2 ms 
System.currentTimeMillis(): 4.685 ms (new Date()).getTime(): 11.53 ms Calendar.getInstance().getTimeInMillis(): 122.6 ms 
System.currentTimeMillis(): 4.734 ms (new Date()).getTime(): 11.66 ms Calendar.getInstance().getTimeInMillis(): 131.5 ms 
System.currentTimeMillis(): 4.018 ms (new Date()).getTime(): 19.33 ms Calendar.getInstance().getTimeInMillis(): 127.6 ms 
System.currentTimeMillis(): 5.474 ms (new Date()).getTime(): 16.74 ms Calendar.getInstance().getTimeInMillis(): 113.6 ms 
System.currentTimeMillis(): 3.871 ms (new Date()).getTime(): 14.46 ms Calendar.getInstance().getTimeInMillis(): 120.5 ms 
System.currentTimeMillis(): 8.223 ms (new Date()).getTime(): 11.65 ms Calendar.getInstance().getTimeInMillis(): 173.8 ms 
System.currentTimeMillis(): 4.611 ms (new Date()).getTime(): 9.978 ms Calendar.getInstance().getTimeInMillis(): 117.9 ms 
System.currentTimeMillis(): 3.794 ms (new Date()).getTime(): 11.33 ms Calendar.getInstance().getTimeInMillis(): 89.79 ms 
System.currentTimeMillis(): 4.298 ms (new Date()).getTime(): 12.37 ms Calendar.getInstance().getTimeInMillis(): 123.8 ms 

espero, esto le ayudará.

Cuestiones relacionadas