Question

I crée un filtre qui contrôle la longueur d'une demande.

long start = System.nanoTime();

...

long end = System.nanoTime();

Comment puis-je obtenir le nombre de millisecondes de maintenant?

Était-ce utile?

La solution

(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 de toute façon nanoseconde (précision dépend du système d'exploitation). De la Javadoc sur nanoTime():

  

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

Autres conseils

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'exemple ci-dessus tournera nanosecondes en secondes. Notez aussi que cette tronque de sorte que vous ne perdiez une certaine précision. Par conséquent, si vous passez à minutes, vous perdrez la précision des secondes. Si vous voulez obtenir un résultat de « 12 minutes et 32 ??secondes », vous devrez alors faire un traitement ultérieur avec cette solution.

TimeUnit.NANOSECONDS.toMillis(end - start);

C'est tout!

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

1 nanoseconde est de 10 ^ -9 secondes et, par conséquent, 10 ^ -6 millisecondes.
http://en.wikipedia.org/wiki/Nano-

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 ) ;
}

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top