2013-06-08 26 views
8

Speravo di spremere un piccolo aumento di prestazioni da molte chiamate a una funzione che restituisce un timestamp. La funzione è simile al seguente:Differenza tra System.currentTimeMillis() e Date getTime()?

public static long get_now_ms(){ 
    // returns number of MILLISECONDS since epoch 
    java.util.Date d = new java.util.Date(); 
    return d.getTime(); 
} 

posso solo sostituire questo con:

public static long get_now_ms(){ 
    // returns number of MILLISECONDS since epoch 
    return System.currentTimeMillis(); 
} 

So che Data utilizza internamente System.currentTimeMillis(). La mia domanda è più se l'ora legale o il fuso orario potrebbero mai portare a una differenza di risultato con questi due approcci. Immagino che questo possa venire in mente con gli oggetti del Calendario, ma non con gli oggetti Data, ma mi piacerebbe qualche chiarimento su questo.

So che probabilmente non vedrò una differenza apprezzabile nelle prestazioni in un'applicazione reale, ma vorrei comunque conoscere la risposta.

Grazie!

risposta

9

Nessuna differenza, tranne per il leggero ritardo causato dall'assegnazione di un oggetto Date.

Dal javadoc il costruttore di default di Date:

alloca un oggetto Date e inizializza in modo che esso rappresenta il momento in cui è stato allocato, misurata al millisecondo circa.

A Date è solo un involucro sottile intorno ai millisecondi di epoca, senza alcun concetto di fusi orari. Solo quando il rendering in una stringa viene considerato fuso orario, ma viene gestito dalla classe Locale.

3

Suggerirei di eseguire un test dell'unità (ad esempio https://gist.github.com/ledlogic/8532028). Ho visto solo un leggero vantaggio generale nell'esecuzione di System.currentTimeMillis rispetto a (new Date()). GetTime().

1 billion runs: (1000 outer loops, 1,000,000 inner loops): 
    System.currentTimeMillis(): 14.353 seconds 
    (new Date()).getTime(): 16.668 seconds 

Le corse individuali a volte sono leggermente sbilanciate verso l'approccio successivo, a seconda dell'attività del sistema.

1

Nessuna differenza e anche Calendar.getTimeInMillis() è uguale. perché il risultato restituito è il numero di millisecondi dal 1 gennaio 1970, 00:00:00 GMT. otterrai lo stesso valore lungo ovunque tu sia in tutto il mondo.