Patrick Connolly
2004-Feb-13 02:07 UTC
[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 ~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
Gabor Grothendieck
2004-Feb-13 04:03 UTC
[R] How to get time differences in consistent units?
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 ~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~