Hi
I need a few lines of code that calculate the time between two Date()
objects.
import java.util.Date;
import java.util.concurrent.TimeUnit;
/**
* Computes the time difference between two dates, as a-b.
* @param units the desired units of the result. Units larger than
* MILLISECONDS may cause truncation
*/
public long getDifference(Date a, Date b, TimeUnit units) {
return units.convert(a.getTime()-b.getTime(), TimeUnit.MILLISECONDS);
}
I need it to calculate the time between two occurences - if there is a
better solution than using Date() objects I'm all ears
Date is appropriate if you are echoing the Date information to a log,
console, or are otherwise presenting the "time of occurence" somewhere in
a human readable format. It uses System.currentTimeMillis under the hood.
System.currentTimeMillis is appropriate for exchanging time between two
remote machines, or for saving a timestamp to be read back in a later
session. But, for 2 or more machines, keep in mind that those machines may
have the clock set slightly differently. System.currentTimeMillis is also
dependant on the OS clock granularity, and on Windows this value only
changes every 10ms or so. Lastly, if the system clock changes between
calculations, then you don't get a measurement of the timelapse between
said events. While it may be uncommon for a user to change the clock
between events, many modern systems do have the option for network time
syncs, which can automatically adjust the clock in the background.
System.nanoTime is appropriate for measuring elapsed time within a single
VM session. If you just call System.nanoTime(), the result doesn't have
any meaning that you can display. But differences between calls will give
you a good measure of elapsed time. Of course, differences between
System.nanoTime taken on one host vs another host aren't going to have
much value or meaning, and the same goes for taking differences between
the current VM session and a previous session. However, System.nanoTime is
immune from clock changes, and will give you correct elapsed time results,
and with much greater precision than System.currentTimeMillis.
Hope that helps to answer your question.
-Zig