Y a-t-il un chronomètre en Java?

Y a-t-il un chronomètre en Java? Sur google, je ne trouve que le code des chronomètres qui ne fonctionnent pas – ils retournent toujours 0 milliseconde.

Ce code que j’ai trouvé ne fonctionne pas mais je ne vois pas pourquoi.

public class StopWatch { private long startTime = 0; private long stopTime = 0; private boolean running = false; public void start() { this.startTime = System.currentTimeMillis(); this.running = true; } public void stop() { this.stopTime = System.currentTimeMillis(); this.running = false; } //elaspsed time in milliseconds public long getElapsedTime() { long elapsed; if (running) { elapsed = (System.currentTimeMillis() - startTime); } else { elapsed = (stopTime - startTime); } return elapsed; } //elaspsed time in seconds public long getElapsedTimeSecs() { long elapsed; if (running) { elapsed = ((System.currentTimeMillis() - startTime) / 1000); } else { elapsed = ((stopTime - startTime) / 1000); } return elapsed; } } 

Vous en trouverez un dans

http://commons.apache.org/lang/

C’est appelé

 org.apache.commons.lang.time.StopWatch 

Mais ça fait à peu près la même chose que la vôtre. Si vous voulez plus de précision, utilisez

 System.nanoTime() 

Voir aussi cette question ici:

Temps de mesure des frais généraux en Java

Utilisez la classe Stopwatch la goyave .

Un object qui mesure le temps écoulé en nanosecondes. Il est utile de mesurer le temps écoulé en utilisant cette classe au lieu d’appels directs à System.nanoTime() pour quelques raisons:

  • Une source de temps alternative peut être substituée, pour des raisons de test ou de performance.
  • Comme documenté par nanoTime, la valeur renvoyée n’a aucune signification absolue et ne peut être interprétée que par rapport à un autre horodatage renvoyé par nanoTime à un moment différent. Chronomètre est une abstraction plus efficace, car elle n’expose que ces valeurs relatives, pas les valeurs absolues.
 Stopwatch stopwatch = Stopwatch.createStarted(); doSomething(); stopwatch.stop(); // optional long millis = stopWatch.elapsed(TimeUnit.MILLISECONDS); log.info("that took: " + stopwatch); // formatted ssortingng like "12.3 ms" 

Maintenant, vous pouvez essayer quelque chose comme:

 Instant starts = Instant.now(); Thread.sleep(10); Instant ends = Instant.now(); System.out.println(Duration.between(starts, ends)); 

La sortie est en ISO 8601.

Spring fournit une classe org.springframework.util.StopWatch élégante (module Spring-core).

 StopWatch stopWatch = new StopWatch(); stopWatch.start(); // Do something stopWatch.stop(); System.out.println(stopWatch.getTotalTimeMillis()); 

Le code ne fonctionne pas car la variable écasting dans getElapsedTimeSecs () n’est pas un float / double.

Utilisez System.currentTimeMillis() pour obtenir l’heure de début et l’heure de fin et calculer la différence.

 class TimeTest1 { public static void main(Ssortingng[] args) { long startTime = System.currentTimeMillis(); long total = 0; for (int i = 0; i < 10000000; i++) { total += i; } long stopTime = System.currentTimeMillis(); long elapsedTime = stopTime - startTime; System.out.println(elapsedTime); } } 

Plus d'infos sur ce tutoriel

Il n’y a pas d’utilitaire Stopwatch intégré, mais à partir de JSR-310 (Java 8 Time), vous pouvez le faire simplement.

 ZonedDateTime now = ZonedDateTime.now(); // Do stuff long seconds = now.until(ZonedDateTime.now(), ChronoUnit.SECONDS); 

Je ne l’ai pas bien évalué, mais je pense que l’utilisation du chronomètre de Guava est plus efficace.

essaye ça

 import java.awt.event.*; import java.awt.*; import javax.swing.*; public class millis extends JFrame implements ActionListener, Runnable { private long startTime; private final static java.text.SimpleDateFormat timerFormat = new java.text.SimpleDateFormat("mm : ss.SSS"); private final JButton startStopButton= new JButton("Start/stop"); private Thread updater; private boolean isRunning= false; private final Runnable displayUpdater= new Runnable() { public void run() { displayElapsedTime(System.currentTimeMillis() - millis.this.startTime); } }; public void actionPerformed(ActionEvent ae) { if(isRunning) { long elapsed= System.currentTimeMillis() - startTime; isRunning= false; try { updater.join(); // Wait for updater to finish } catch(InterruptedException ie) {} displayElapsedTime(elapsed); // Display the end-result } else { startTime= System.currentTimeMillis(); isRunning= true; updater= new Thread(this); updater.start(); } } private void displayElapsedTime(long elapsedTime) { startStopButton.setText(timerFormat.format(new java.util.Date(elapsedTime))); } public void run() { try { while(isRunning) { SwingUtilities.invokeAndWait(displayUpdater); Thread.sleep(50); } } catch(java.lang.reflect.InvocationTargetException ite) { ite.printStackTrace(System.err); // Should never happen! } catch(InterruptedException ie) {} // Ignore and return! } public millis() { startStopButton.addActionListener(this); getContentPane().add(startStopButton); setSize(100,50); setVisible(true); } public static void main(Ssortingng[] arg) { new Stopwatch().addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); millis s=new millis(); s.run(); } } 

Essayez ceci http://introcs.cs.princeton.edu/java/stdlib/Stopwatch.java.html

c’est très facile

 Stopwatch st = new Stopwatch(); // Do smth. here double time = st.elapsedTime(); // the result in millis 

Cette classe fait partie de stdlib.jar

Simple out of the class Classe de chronomètre:

 import java.time.Duration; import java.time.Instant; public class StopWatch { Instant startTime, endTime; Duration duration; boolean isRunning = false; public void start() { if (isRunning) { throw new RuntimeException("Stopwatch is already running."); } this.isRunning = true; startTime = Instant.now(); } public Duration stop() { this.endTime = Instant.now(); if (!isRunning) { throw new RuntimeException("Stopwatch has not been started yet"); } isRunning = false; Duration result = Duration.between(startTime, endTime); if (this.duration == null) { this.duration = result; } else { this.duration = duration.plus(result); } return this.getElapsedTime(); } public Duration getElapsedTime() { return this.duration; } public void reset() { if (this.isRunning) { this.stop(); } this.duration = null; } } 

Usage:

 StopWatch sw = new StopWatch(); sw.start(); // doWork() sw.stop(); System.out.println( sw.getElapsedTime().toMillis() + "ms"); 

Essaye ça:

 /* * calculates elapsed time in the form hrs:mins:secs */ public class StopWatch { private Date startTime; public void startTiming() { startTime = new Date(); } public Ssortingng stopTiming() { Date stopTime = new Date(); long timediff = (stopTime.getTime() - startTime.getTime())/1000L; return(DateUtils.formatElapsedTime(timediff)); } } 

Utilisation:

 StopWatch sw = new StopWatch(); ... sw.startTiming(); ... Ssortingng interval = sw.stopTiming(); 

user1007522, je ne sais pas pourquoi votre code ne fonctionne pas (on dirait qu’il a déjà été commenté à ce sujet), mais j’ai eu le même problème pour obtenir 0 millisecondes de com.google.common.base.Stopwatch.

je faisais

 Stopwatch stopwatch = new Stopwatch(); doSomething(); logger.info("test took:" + stopwatch); 

Maintenant je fais

 Stopwatch stopwatch = new Stopwatch().start(); doSomething(); stopwatch.stop(); logger.info("test took:" + stopwatch); 

et ça marche, j’obtiens “le test a pris: 26,81 s”

Vous pouvez en trouver une pratique ici:

https://github.com/varra4u/utils4j/blob/master/src/main/java/com/varra/util/StopWatch.java

Usage:

 final StopWatch timer = new StopWatch(); System.out.println("Timer: " + timer); System.out.println("ElapsedTime: " + timer.getElapsedTime()); 

Essaye ça.

 public class StopWatch { private long startTime = 0; private long stopTime = 0; public StopWatch() { startTime = System.currentTimeMillis(); } public void start() { startTime = System.currentTimeMillis(); } public void stop() { stopTime = System.currentTimeMillis(); System.out.println("StopWatch: " + getElapsedTime() + " milliseconds."); System.out.println("StopWatch: " + getElapsedTimeSecs() + " seconds."); } /** * @param process_name */ public void stop(Ssortingng process_name) { stopTime = System.currentTimeMillis(); System.out.println(process_name + " StopWatch: " + getElapsedTime() + " milliseconds."); System.out.println(process_name + " StopWatch: " + getElapsedTimeSecs() + " seconds."); } //elaspsed time in milliseconds public long getElapsedTime() { return stopTime - startTime; } //elaspsed time in seconds public double getElapsedTimeSecs() { double elapsed; elapsed = ((double)(stopTime - startTime)) / 1000; return elapsed; } } 

Usage:

 StopWatch watch = new StopWatch(); // do something watch.stop(); 

Console:

 StopWatch: 143 milliseconds. StopWatch: 0.143 seconds. 

utilisez: com.google.common.base.Stopwatch, c’est simple et facile.

  com.google.guava guava 23.0  

Exemple:

 Stopwatch stopwatch = new Stopwatch(); stopwatch.start(); "Do something" logger.debug("this task took " + stopwatch.stop().elapsedTime(TimeUnit.MILLISECONDS) + " mills"); 

cette tâche a pris 112 moulins