# [R] How to get time differences in consistent units?

Gabor Grothendieck ggrothendieck at myway.com
Fri Feb 13 05:03:38 CET 2004

```
If date1 and date2 have been defined in the GMT time zone
then this should do it:

difftime( date1, date2, tz="GMT" )

The other way is to represent your dates as chron dates since chron
does not support time zones at all.  In that case you could just do:

date1 - date2

---
Date: Fri, 13 Feb 2004 15:07:49 +1300
From:   Patrick Connolly <p.connolly at hortresearch.co.nz>
To:   R-help <r-help at stat.math.ethz.ch>
Subject:   [R] How to get time differences in consistent units?

I'm still having trouble getting to grips with time classes.

I wish to calculate the difference in days between events.

Browse[1]> insp.j\$First
[1] "2002-02-19 13:00:00 NZDT"
Browse[1]> spray.j\$Date
[1] "2001-11-29 13:00:00 NZDT"
Browse[1]> insp.jk - spray.j\$Date
Time difference of 82 days

If I save insp.jk to a vector, I get a nice useful value of 82.

However, when the dreaded daylight savings enters the picture, we get
this sort of thing:

Browse[1]> insp.j\$First
[1] "2003-02-14 13:00:00 NZDT"
Browse[1]> spray.j\$Date
[1] "2002-12-16 13:00:00 NZDT" "2003-01-15 13:00:00 NZDT"
[3] "2003-02-14 13:00:00 NZDT" "2003-02-14 13:00:00 NZDT"
[5] "2003-03-25 12:00:00 NZST"
Browse[1]> insp.jk - spray.j\$Date
Time differences of 5184000, 2592000, 0, 0, -3369600 secs

Saving that insp.jk to a vector, I get one in seconds which isn't
simply comparable to others. It would be simple enough to put in an
as.numeric() so that comparisons are always in seconds, but it would
be preferable to have some control over how the difference is reported.

Looking through previous discussions on this sort of thing I thought I
could save hassle by using tz = GMT for everything which is what I've
tried, and hence that's why the times are shown as 1pm and noon
depending on whether it's NZST or NSDT. It appears to me that while
the dates are known to the software as GMT, they are displayed in
local time equivalent but before the differnce between them is
calculated, that converson happens again whether we like it or not.

Evidently, that's not what happens when as.numeric() is used before
calculating the difference since in that case (with my data), the
difference is always a whole number of days which is appropriate.

Is my experience with date differences standard behaviour or an OS
idiosyncrasy?

platform i686-pc-linux-gnu
arch i686
os linux-gnu
system i686, linux-gnu
status
major 1
minor 8.1
year 2003
month 11
day 21

Redhat 7.3 (with the dreaded gcc-2.96 compiler)

best

--
Patrick Connolly
HortResearch
Mt Albert
Auckland
New Zealand
Ph: +64-9 815 4200 x 7188
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
I have the world`s largest collection of seashells. I keep it on all
the beaches of the world ... Perhaps you`ve seen it. ---Steven Wright
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~

```