[Rd] Date conversion with as.POSIXct and as.POSIXlt (PR#9196)

Peter Dalgaard p.dalgaard at biostat.ku.dk
Fri Sep 1 12:08:38 CEST 2006


erich.neuwirth at univie.ac.at writes:

> Full_Name: Erich Neuwirth
> Version: 2.3.1
> OS: Windows XP, Linux
> Submission from: (NULL) (131.130.135.167)
> 
> 
> Converting Sys.Date() to a POSIX compliant time type in different ways 
> produces inconsistent results:
> > Sys.date()
> [1] "2006-09-01"
> > as.POSIXct(Sys.Date())
> [1] "2006-09-01 02:00:00 CEST"
> > as.POSIXlt(Sys.Date())
> [1] "2006-09-01"
> > as.POSIXct(as.POSIXlt(Sys.Date()))
> [1] "2006-09-01 01:00:00 CEST"
> 
> Applying as.POSIXct directly or first applying as.POSIXlt and then
> applying as.POSIXct produces different results.
> 
> This happens on Linux with timezone "CEST"
> > Sys.time()
> [1] "2006-09-01 11:03:36 CEST"
> and on Windows with timezone "W. Europe Daylight Time"
> > Sys.time()
> [1] "2006-09-01 11:11:15 W. Europe Daylight Time"


Or,

> as.POSIXct(Sys.Date()) - as.POSIXlt(Sys.Date())
Time difference of 1 hours
> as.POSIXct(Sys.time()) - as.POSIXlt(Sys.time())
Time difference of -0.0003409386 secs

Whereas

> Sys.putenv("TZ"="GMT")
> as.POSIXct(Sys.Date()) - as.POSIXlt(Sys.Date())
Time difference of 0 secs

and

> Sys.putenv("TZ"="EST")
> as.POSIXct(Sys.Date()) - as.POSIXlt(Sys.Date())
Time difference of -5 hours

So the difference is that as.POSIXct works in GMT whereas as.POSIXlt
works in the local timezone w/o DST corrections, the point of the
latter likely being that

> as.POSIXlt(as.Date("2006-7-1"))-as.POSIXlt(as.Date("2006-1-1"))
Time difference of 181 days

comes out as an integer number of days.

BTW, the habit of format.POSIXlt dropping off the time when it is
exactly 01:00 in CEST (i.e. would have been midnight, save for
Daylight Savings Time) is a bit confusing too...  

I'm not sure any of this is actual bugs (Brian will tell us soon
enough), but it does appear at least to be underdocumented.

-- 
   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




More information about the R-devel mailing list