2010-09-06 4 views

Répondre

35
(end - start)/1000000 

1 microseconde = 1000 nanosecondes

1 milliseconde = 1000 microsecondes

Notez que le résultat sera arrondi vers le bas, mais vous ne reçoivent généralement pas vrai précision nanoseconde de toute façon (la précision dépend de l'OS). De l'Javadoc sur nanoTime():

Cette méthode fournit une précision nanoseconde, mais pas nécessairement la précision nanoseconde.

+6

Et juste au cas où ... Précision signifie grossièrement le nombre de décimales (le nombre 1.00000000000135738 a beaucoup de précision) alors que la précision indique quelque chose sur le nombre de ces décimales ont raison. Par exemple 1.0001 avec une précision de 0.01 pourrait être n'importe où entre 1.0101 et 0.9901, tandis que 1.0 avec une précision de 0.000001 est garanti entre 0.000009 et 1.000001 –

+2

qui fonctionne, mais le nombre qu'il retourne est comme 10, ou 5 au lieu de 10.234234234 ou quelque chose. dois-je lancer? – Blankman

+1

@Blankman: Si vous voulez obtenir un nombre comme 10.234234234, vous pouvez utiliser '(fin - start)/(double) 1000000' (ou' (fin - start)/1000000.', ou '(fin - start)/(float) 1000000' si vous voulez float) –

2

Il suffit de les soustraire et de diviser le résultat par 10^6.

1 nanoseconde est 10^-9 secondes et, de manière correspondante, 10^-6 millisecondes.
http://en.wikipedia.org/wiki/Nano-

0

Vous pouvez simplement utiliser System.currentTimeMillis().

caveat:

Notez que si l'unité de temps de la valeur de retour est un millième de seconde, la granularité de la valeur dépend du système d'exploitation sous-jacent et peut être plus grande. Par exemple, de nombreux systèmes d'exploitation mesurent le temps en unités de dizaines de millisecondes.

1

Pour obtenir un résultat significatif:

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

Notez également que vous pouvez utiliser la classe TimeUnit pour aider à la conversion. Avec les anciennes versions de Java, le code suivant pourrait être un exemple pour transformer un temps de traitement dans un autre format de l'heure:

long startTime = System.nanoTime(); 

//Processing in-between. 

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

Notez que les versions plus récentes de Java ont des raccourcis dans la classe TimeUnit.

L'échantillon ci-dessus tournera des nanosecondes en secondes. Notez également que cela le tronque de sorte que vous perdez une certaine précision. Par conséquent, si vous passez aux minutes, vous perdrez la précision des secondes. Si vous souhaitez obtenir un résultat de "12 minutes et 32 ​​secondes", vous devrez effectuer un traitement supplémentaire avec cette solution.

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

C'est tout!

Questions connexes