54 votes

Comment calculer le temps écoulé d'un événement en java ?

Quel est le moyen le plus simple d'accéder à l'horloge du système en utilisant Java, afin de pouvoir calculer le temps écoulé d'un événement ?

81voto

Leigh Points 2144

J'éviterais d'utiliser System.currentTimeMillis() pour mesurer le temps écoulé. currentTimeMillis() renvoie l'heure de l'horloge murale, qui peut changer (par exemple, changement d'heure, changement d'horloge par l'administrateur) et fausser vos mesures d'intervalle.

System.nanoTime(), quant à lui, renvoie le nombre de nanosecondes depuis "un point de référence" (par exemple, le démarrage de la JVM), et ne serait donc pas sensible aux changements d'horloge du système.

25voto

jjnguy Points 62123

Voici un exemple de code.

long startTime = System.currentTimeMillis();
// Run some code;
long stopTime = System.currentTimeMillis();

System.out.println("Elapsed time was " + (stopTime - startTime) + " miliseconds.");

9voto

Spencer Kormos Points 3082

Apache Commons-Lang dispose également de la classe StopWatch adaptée à vos besoins. Elle utilise System.currentTimeMillis(), donc vous aurez toujours des problèmes de résolution, mais vous pouvez faire une pause et faire des temps au tour et autres. Je l'utilise maintenant comme standard pour les statistiques d'événements.

http://commons.apache.org/lang/api-release/org/apache/commons/lang/time/StopWatch.html

5voto

tvanfosson Points 268301

java.lang.System.currentTimeMillis() o java.lang.System.nanoTime() devrait fonctionner pour mesurer le temps écoulé.

3voto

Wilhem Meignan Points 123

Voici une petite classe StopWatch que j'ai écrite en utilisant System.nanoTime() comme suggéré dans la réponse de Leigh :

public class StopWatch {
    // Constructor
    public StopWatch() {
    }

    // Public API
    public void start() {
        if (!_isRunning) {
            _startTime = System.nanoTime();
            _isRunning = true;
        }
    }

    public void stop() {
        if (_isRunning) {
            _elapsedTime += System.nanoTime() - _startTime;
            _isRunning = false;
        }
    }

    public void reset() {
        _elapsedTime = 0;
        if (_isRunning) {
            _startTime = System.nanoTime();
        }
    }

    public boolean isRunning() {
        return _isRunning;
    }

    public long getElapsedTimeNanos() {
        if (_isRunning) {
            return System.nanoTime() - _startTime;
        }
        return _elapsedTime;
    }

    public long getElapsedTimeMillis() {
        return getElapsedTimeNanos() / 1000000L;
    }

    // Private Members
    private boolean _isRunning = false;
    private long _startTime = 0;
    private long _elapsedTime = 0;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X