gerald.herbert@hubbardbreeders.com
2006-Feb-21 15:48 UTC
[R] Number of Days Between Dates: Incorrect Results For Date Calucations.
In some cases, incorrect results are produced by the code below intended to calculate the number of days between 2 dates. The year in question was a leap year. Note the results for 2004-04-04 and 2004-04-05 are the same! They should be 37 and 38 respectively.> as.integer(as.POSIXct("2004-04-02") - as.POSIXct("2004-02-27"))[1] 35> as.integer(as.POSIXct("2004-04-03") - as.POSIXct("2004-02-27"))[1] 36> as.integer(as.POSIXct("2004-04-04") - as.POSIXct("2004-02-27"))[1] 37> as.integer(as.POSIXct("2004-04-05") - as.POSIXct("2004-02-27"))[1] 37> as.integer(as.POSIXct("2004-04-06") - as.POSIXct("2004-02-27"))[1] 38> as.integer(difftime(as.POSIXct("2004-04-06"),as.POSIXct("2004-02-27"),units="days")) [1] 38> as.integer(difftime(as.POSIXct("2004-04-04"),as.POSIXct("2004-02-27"),units="days")) [1] 37> as.integer(difftime(as.POSIXct("2004-04-05"),as.POSIXct("2004-02-27"),units="days")) [1] 37 It appears that difftime() and "-" are producing invalid results. Regards, Gerald Herbert
Gabor Grothendieck
2006-Feb-21 16:08 UTC
[R] Number of Days Between Dates: Incorrect Results For Date Calucations.
The results are actually correct if you consider daylight savings time. For example, try this and note that the difference is 23 hours, not 24 hours: as.POSIXct("2004-04-05") - as.POSIXct("2004-04-04") You can address this by either using Date or chron classes or adding the tz = "GMT" argument on your as.POSIXct calls as GMT does not have daylight savings time. See the Help Desk article in R News 4/1 for more on this. On 2/21/06, gerald.herbert at hubbardbreeders.com <gerald.herbert at hubbardbreeders.com> wrote:> In some cases, incorrect results are produced by the code below intended to > calculate the number of days between 2 dates. The year in question was a > leap year. > > Note the results for 2004-04-04 and 2004-04-05 are the same! They should be > 37 and 38 respectively. > > > as.integer(as.POSIXct("2004-04-02") - as.POSIXct("2004-02-27")) > [1] 35 > > as.integer(as.POSIXct("2004-04-03") - as.POSIXct("2004-02-27")) > [1] 36 > > as.integer(as.POSIXct("2004-04-04") - as.POSIXct("2004-02-27")) > [1] 37 > > as.integer(as.POSIXct("2004-04-05") - as.POSIXct("2004-02-27")) > [1] 37 > > as.integer(as.POSIXct("2004-04-06") - as.POSIXct("2004-02-27")) > [1] 38 > > > > > as.integer(difftime(as.POSIXct("2004-04-06"), > as.POSIXct("2004-02-27"),units="days")) > [1] 38 > > as.integer(difftime(as.POSIXct("2004-04-04"), > as.POSIXct("2004-02-27"),units="days")) > [1] 37 > > as.integer(difftime(as.POSIXct("2004-04-05"), > as.POSIXct("2004-02-27"),units="days")) > [1] 37 > > It appears that difftime() and "-" are producing invalid results. > > > Regards, > > Gerald Herbert > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html >
Dimitris Rizopoulos
2006-Feb-21 16:11 UTC
[R] Number of Days Between Dates: Incorrect Results For DateCalucations.
check again your results with as.integer() replaced by round(); check also ?as.integer for its usage. I hope it helps. Best, Dimitris ---- Dimitris Rizopoulos Ph.D. Student Biostatistical Centre School of Public Health Catholic University of Leuven Address: Kapucijnenvoer 35, Leuven, Belgium Tel: +32/(0)16/336899 Fax: +32/(0)16/337015 Web: http://www.med.kuleuven.be/biostat/ http://www.student.kuleuven.be/~m0390867/dimitris.htm ----- Original Message ----- From: <gerald.herbert at hubbardbreeders.com> To: <r-help at stat.math.ethz.ch> Sent: Tuesday, February 21, 2006 4:48 PM Subject: [R] Number of Days Between Dates: Incorrect Results For DateCalucations.> In some cases, incorrect results are produced by the code below > intended to > calculate the number of days between 2 dates. The year in question > was a > leap year. > > Note the results for 2004-04-04 and 2004-04-05 are the same! They > should be > 37 and 38 respectively. > >> as.integer(as.POSIXct("2004-04-02") - as.POSIXct("2004-02-27")) > [1] 35 >> as.integer(as.POSIXct("2004-04-03") - as.POSIXct("2004-02-27")) > [1] 36 >> as.integer(as.POSIXct("2004-04-04") - as.POSIXct("2004-02-27")) > [1] 37 >> as.integer(as.POSIXct("2004-04-05") - as.POSIXct("2004-02-27")) > [1] 37 >> as.integer(as.POSIXct("2004-04-06") - as.POSIXct("2004-02-27")) > [1] 38 > > > >> as.integer(difftime(as.POSIXct("2004-04-06"), > as.POSIXct("2004-02-27"),units="days")) > [1] 38 >> as.integer(difftime(as.POSIXct("2004-04-04"), > as.POSIXct("2004-02-27"),units="days")) > [1] 37 >> as.integer(difftime(as.POSIXct("2004-04-05"), > as.POSIXct("2004-02-27"),units="days")) > [1] 37 > > It appears that difftime() and "-" are producing invalid results. > > > Regards, > > Gerald Herbert > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.html >Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
Peter Dalgaard
2006-Feb-21 16:36 UTC
[R] Number of Days Between Dates: Incorrect Results For Date Calucations.
<gerald.herbert at hubbardbreeders.com> writes:> In some cases, incorrect results are produced by the code below intended to > calculate the number of days between 2 dates. The year in question was a > leap year.> Note the results for 2004-04-04 and 2004-04-05 are the same! They should be > 37 and 38 respectively.Nope. First, it depends on your timezone. Over here, they do actually differ. However, a few weeks earlier, we have the similar phenomenon> as.POSIXct("2004-03-29") - as.POSIXct("2004-02-27")Time difference of 30.95833 days> as.POSIXct("2004-03-28") - as.POSIXct("2004-02-27")Time difference of 30 days which is of course because March 28 was only 23 hours long which is in turn because> as.POSIXct("2004-03-28")[1] "2004-03-28 CET"> as.POSIXct("2004-03-29")[1] "2004-03-29 CEST" Get it?> > as.integer(as.POSIXct("2004-04-02") - as.POSIXct("2004-02-27")) > [1] 35 > > as.integer(as.POSIXct("2004-04-03") - as.POSIXct("2004-02-27")) > [1] 36 > > as.integer(as.POSIXct("2004-04-04") - as.POSIXct("2004-02-27")) > [1] 37 > > as.integer(as.POSIXct("2004-04-05") - as.POSIXct("2004-02-27")) > [1] 37 > > as.integer(as.POSIXct("2004-04-06") - as.POSIXct("2004-02-27")) > [1] 38 > > > > > as.integer(difftime(as.POSIXct("2004-04-06"), > as.POSIXct("2004-02-27"),units="days")) > [1] 38 > > as.integer(difftime(as.POSIXct("2004-04-04"), > as.POSIXct("2004-02-27"),units="days")) > [1] 37 > > as.integer(difftime(as.POSIXct("2004-04-05"), > as.POSIXct("2004-02-27"),units="days")) > [1] 37 > > It appears that difftime() and "-" are producing invalid results. > > > Regards, > > Gerald Herbert > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html >-- O__ ---- Peter Dalgaard ??ster Farimagsgade 5, Entr.B c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907