Java中有秒表吗?在谷歌我只找到不起作用的秒表代码 - 它们总是返回0毫秒.
我找到的这段代码不起作用,但我不明白为什么.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
Luk*_*der 87
你会找到一个
http://commons.apache.org/lang/
它被称为
org.apache.commons.lang.time.StopWatch
Run Code Online (Sandbox Code Playgroud)
但它与你的大致相同.如果您需要更高精度,请使用
System.nanoTime()
Run Code Online (Sandbox Code Playgroud)
另见这个问题:
hel*_*hod 82
测量经过时间的对象,以纳秒为单位.
System.nanoTime()
由于以下几个原因,使用此类而不是直接调用来测量已用时间非常有用 :
- 出于测试或性能原因,可以替换备用时间源.
- 如nanoTime所述,返回的值没有绝对意义,只能解释为相对于nanoTime在不同时间返回的另一个时间戳.秒表是一种更有效的抽象,因为它只暴露这些相对值,而不是绝对值.
Stopwatch stopwatch = Stopwatch.createStarted();
doSomething();
stopwatch.stop(); // optional
long millis = stopwatch.elapsed(TimeUnit.MILLISECONDS);
log.info("that took: " + stopwatch); // formatted string like "12.3 ms"
Run Code Online (Sandbox Code Playgroud)
Val*_*ura 54
现在你可以尝试类似的东西:
Instant starts = Instant.now();
Thread.sleep(10);
Instant ends = Instant.now();
System.out.println(Duration.between(starts, ends));
Run Code Online (Sandbox Code Playgroud)
输出符合ISO 8601标准.
Lar*_*sen 35
Spring提供了一个优雅的org.springframework.util.StopWatch
Class(spring-core模块).
StopWatch stopWatch = new StopWatch();
stopWatch.start();
// Do something
stopWatch.stop();
System.out.println(stopWatch.getTotalTimeMillis());
Run Code Online (Sandbox Code Playgroud)
使用System.currentTimeMillis()
获得的开始时间和结束时间,并计算差值.
class TimeTest1 {
public static void main(String[] 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);
}
}
Run Code Online (Sandbox Code Playgroud)
没有内置的秒表实用程序,但从JSR-310(Java 8 Time)开始,您可以简单地执行此操作.
ZonedDateTime now = ZonedDateTime.now();
// Do stuff
long seconds = now.until(ZonedDateTime.now(), ChronoUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)
我没有正确地对此进行基准测试,但我猜想使用Guava的秒表会更有效.