[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

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

Redhat 7.3 (with the dreaded gcc-2.96 compiler)


Patrick Connolly
Mt Albert
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 

More information about the R-help mailing list