# Calculating time between two date objects

Discussion in 'Java' started by Brian, Dec 9, 2007.

1. ### BrianGuest

Hi

I need a few lines of code that calculate the time between two Date()
objects.

I need it to calculate the time between two occurences - if there is a
better solution than using Date() objects I'm all ears

Sincerely
Brian

Brian, Dec 9, 2007

2. ### Arne VajhøjGuest

Brian wrote:
> I need a few lines of code that calculate the time between two Date()
> objects.
>
> I need it to calculate the time between two occurences - if there is a
> better solution than using Date() objects I'm all ears

..getTime() on both and subtract ?

Arne

Arne Vajhøj, Dec 9, 2007

3. ### Daniel PittsGuest

Arne Vajhøj wrote:
> Brian wrote:
>> I need a few lines of code that calculate the time between two Date()
>> objects.
>> I need it to calculate the time between two occurences - if there is a
>> better solution than using Date() objects I'm all ears

>
> ..getTime() on both and subtract ?
>
> Arne

You can also use System.currentTimeMilles(), depending on what you need.
How close together are the occurrences? Is this for timing a short
method, or is it for days apart?

--
Daniel Pitts' Tech Blog: <http://virtualinfinity.net/wordpress/>

Daniel Pitts, Dec 9, 2007
4. ### ZigGuest

On Sun, 09 Dec 2007 15:21:11 -0500, Brian <mail@DEL_oddball_ETE.dk> wrote:

> 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.

-Zig

Zig, Dec 9, 2007
5. ### Roedy GreenGuest

On Sun, 09 Dec 2007 21:21:11 +0100, Brian <mail@DEL_oddball_ETE.dk>
wrote, quoted or indirectly quoted someone who said :

>I need a few lines of code that calculate the time between two Date()
>objects.

see http://mindprod.com/jgloss/time.html
--
The Java Glossary
http://mindprod.com

Roedy Green, Dec 10, 2007