How do I measure time elapsed in Java?
Unfortunately, none of the ten answers posted so far are quite right.
If you are measuring elapsed time, and you want it to be correct, you must use System.nanoTime()
. You cannot use System.currentTimeMillis()
, unless you don't mind your result being wrong.
The purpose of nanoTime
is to measure elapsed time, and the purpose of currentTimeMillis
is to measure wall-clock time. You can't use the one for the other purpose. The reason is that no computer's clock is perfect; it always drifts and occasionally needs to be corrected. This correction might either happen manually, or in the case of most machines, there's a process that runs and continually issues small corrections to the system clock ("wall clock"). These tend to happen often. Another such correction happens whenever there is a leap second.
Since nanoTime
's purpose is to measure elapsed time, it is unaffected by any of these small corrections. It is what you want to use. Any timings currently underway with currentTimeMillis
will be off -- possibly even negative.
You may say, "this doesn't sound like it would ever really matter that much," to which I say, maybe not, but overall, isn't correct code just better than incorrect code? Besides, nanoTime
is shorter to type anyway.
Previously posted disclaimers about nanoTime
usually having only microsecond precision are valid. Also it can take more than a whole microsecond to invoke, depending on circumstances (as can the other one), so don't expect to time very very small intervals correctly.
How to measure elapsed time
When the game starts:
long tStart = System.currentTimeMillis();
When the game ends:
long tEnd = System.currentTimeMillis();
long tDelta = tEnd - tStart;
double elapsedSeconds = tDelta / 1000.0;
How do I time a method's execution in Java?
There is always the old-fashioned way:
long startTime = System.nanoTime();
methodToTime();
long endTime = System.nanoTime();
long duration = (endTime - startTime); //divide by 1000000 to get milliseconds.
How do I calculate the elapsed time of an event in Java?
I would avoid using System.currentTimeMillis()
for measuring elapsed time. currentTimeMillis()
returns the 'wall-clock' time, which may change (eg: daylight savings, admin user changing the clock) and skew your interval measurements.
System.nanoTime()
, on the other hand, returns the number of nanoseconds since 'some reference point' (eg, JVM start up), and would therefore not be susceptible to system clock changes.
How can I calculate a time difference in Java?
String time1 = "16:00:00";
String time2 = "19:00:00";
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
Date date1 = format.parse(time1);
Date date2 = format.parse(time2);
long difference = date2.getTime() - date1.getTime();
Difference is in milliseconds.
I modified sfaizs post.
How to measure the elapsed time of ASYNC sent HTTPRequest with Java 11 standard HTTPClient?
Something like the following should do the trick:
long start = System.nanoTime();
CompletableFuture<HttpResponse<String>> httpResponseCF =
this.httpClient.sendAsync(httpRequest, BodyHandlers.ofString()).
whenComplete((r,t) -> System.out.println("elapsed ns: "
+ (System.nanoTime() - start)));
Disclaimer: I haven't actually compiled the above...
It's also not the exact time but the best approximation you can get. As with everything, the exact time is impossible to measure.
Related Topics
How to Get the Current Date and Time in Utc or Gmt in Java
Capturing Stdout When Calling Runtime.Exec
Java: Convert List≪String≫ to a Join()D String
Extends Jframe Vs. Creating It Inside the Program
Difference Between Volatile and Synchronized in Java
Are Getters and Setters Poor Design? Contradictory Advice Seen
Bufferedwriter Not Writing Everything to Its Output File
Does Java Support Default Parameter Values
How to Extract Numbers from a String and Get an Array of Ints
How to Make a Deep Copy of an Object
How to Convert from Int to String
Java Reflection: How to Get the Name of a Variable
Error: the Processing Instruction Target Matching "[Xx][Mm][Ll]" Is Not Allowed
Draw a Line in a Jpanel With Button Click in Java