[Rd] Date and time problems

Prof Brian Ripley ripley at stats.ox.ac.uk
Wed Aug 16 08:31:10 CEST 2006


Short answer: these are OS-specific bugs documented in the R help - see 
the bottom.

On Wed, 16 Aug 2006, Erich Neuwirth wrote:

> I am running R 2.3.1 on Windows XP.
> My machine is set (via the Windows Control Panel) to Central European
> time  (Amsterdam, Berlin, Rome, Stockholm, Vienna) and automatically has
> DST set, so I am 2 hours ahead of GMT.
> No TZ variable is set.
> 
> > Sys.timezone()
> [1] "W. Europe Standard Time"
> > Sys.Date()
> [1] "2006-08-15"
> > as.POSIXlt(Sys.Date())
> [1] "2006-08-15"
> > as.POSIXct(Sys.Date())
> [1] "2006-08-15 02:00:00 W. Europe Standard Time"
> > as.POSIXct(as.POSIXlt(Sys.Date()))
> [1] "2006-08-15 01:00:00 W. Europe Standard Time"
> 
> Converting to POSIXct and converting to POSIXlt and then to POSIXct
> produces different results, which is rather strange.
> 
> When I do
> > Sys.time()
> [1] "2006-08-16 00:12:40 W. Europe Standard Time"
> 
> I get my clock time with numerically correct time for my location, but
> with an incorrect timezone stamp.
> 
> If I set TZ=CET, something else happens.
> It is just past midnight, my Windows system clock shows
> 12:33 AM, and the date is Aug 16 (here in Austria)
> With TZ=CET,
> 
> > Sys.Date()
> [1] "2006-08-15"
> > Sys.time()
> [1] "2006-08-15 22:33:30 CET"
> 
> So I get current GMT time (my time - 2 hours) and date,
> but with a CET time stamp.
> 
> When TZ does not have a value,
> > Sys.Date()
> [1] "2006-08-16"
> > Sys.time()
> [1] "2006-08-16 00:32:37 W. Europe Standard Time"
> 
> This is numerically correct time and date, but with an incorrect
> timezone stamp.
> 
> So I never get completely correct information,
> even when Windows timezone information is correct and TZ has
> the correct value.
> Is this something which should be corrected?

Yes, by Microsoft.  Their labelling of timezones is a known bug.
E.g. I get

> as.POSIXct(Sys.Date())
[1] "2006-08-16 01:00:00 GMT Daylight Time"

and there is no such timezone.   However, if I set my Windows XP SP2 
system to your timezone I do get

> as.POSIXct(Sys.Date())
[1] "2006-08-16 02:00:00 W. Europe Daylight Time"

so something is wrong specific to your machine.


'CET' is not a valid timezone on Windows (where did you get that it was?), 
and the help (for as.POSIXlt) does say that what happens then is 
OS-specific. Again, it does explain that Windows has bugs in its setting 
of timezones so there appears to be no valid way to set programatically 
non-US timezones with DST on that benighted OS.

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



More information about the R-devel mailing list