[R] date calculation

Marc Schwartz marc_schwartz at me.com
Sat Oct 30 16:48:05 CEST 2010


On Oct 30, 2010, at 9:22 AM, Ben Bolker wrote:

> On 10-10-30 02:02 AM, Shi, Tao wrote:
>> Hi Ben,
>> 
>> That must be the case!  In fact if I do:
>> 
>>> difftime(strptime("24NOV2004", format="%d%b%Y"), strptime("13MAY2004",format="%d%b%Y"), units="days", tz="GMT")
>> Time difference of 195 days
>> 
>> 
>> which supports your claim.
>> 
>> Can someone from the R development team confirm this?
>> 
>> Thanks!
>> 
>> ...Tao
>> 
>> 
> 
>   It sounds like you think this is a bug.  It's not (although it's
> arguably not what you want).  The general advice when using dates and
> time in R is to use the *least* specific date format that will do what
> you want, i.e. don't use a format that incorporates time zone
> information (daylight savings time) information if you don't want to
> deal with these complexities.
> 
> I would suggest the chron package:
> 
> library(chron)
> diff(chron(dates.=c("24/11/2004","13/05/2004"),format="d/m/y"))

Ben,

If time and time zone are not relevant, any reason not to use:


> diff(as.Date(c("13/05/2004", "24/11/2004"), format = "%d/%m/%Y"))
Time difference of 195 days


or perhaps conceptually easier:

Date2 <- as.Date("24/11/2004", format = "%d/%m/%Y")
Date1 <- as.Date("13/05/2004", format = "%d/%m/%Y")

> Date2 - Date1
Time difference of 195 days


R has built in arithmetic operations for such dates, without the need to use another package, since they are effectively numerics with a Date class:

> str(Date1)
Class 'Date'  num 12551

> str(Date2)
Class 'Date'  num 12746


?

HTH,

Marc Schwartz



>> 
>> 
>> 
>> ----- Original Message -----
>>> From:Ben Bolker <bbolker at gmail.com>
>>> To:r-help at stat.math.ethz.ch
>>> Cc:
>>> Sent:Friday, October 29, 2010 7:54:53 PM
>>> Subject:Re: [R] date calculation
>>> 
>>> 
>>> Shi, Tao <shidaxia <at> 
>>> href="http://yahoo.com">yahoo.com> writes:
>> 
>>> Could someone 
>>> explain to me why the following result is not a integer?
>>> 
>>>> 
>>> difftime(strptime("24NOV2004", format="%d%b%Y"), strptime("13MAY2004", 
>>> 
>>>> format="%d%b%Y"), units="days")
>>> Time difference of 195.0417 
>>> days
>> 
>>  Presumably because this goes across a daylight-savings 
>>> time
>> adjustment?  0.0417=1/24 days is 1 hour ...
>> 
>>  Ben 
>>> Bolker



More information about the R-help mailing list