[R] timezone problems

Don MacQueen macq at llnl.gov
Thu Jul 7 16:58:46 CEST 2005


?POSIXt says:

      '"POSIXlt"' objects will often have an attribute '"tzone"', a
      character vector of length 3 giving the timezone name from the
      'TZ' environment variable and the names of the base timezone and
      the alternate (daylight-saving) timezone.  Sometimes this may just
      be of length one, giving the timezone name.

Therefore, any function that relies on either
    (1) the presence of a "tzone" attribute, or
    (2) when it is present, it necessarily has a length 3
is relying on something that is documented not to be reliable.

Sys.timezone(), as defined on Martin's system (see his email below) 
does both of these, so that would appear to be the problem.


It is not hard to verify that the tzone attribute is not always 
present, and when present, may be of length one or three.

>  Sys.putenv(TZ='US/Pacific')
>  z <- as.POSIXlt(Sys.time())
>  attributes(z)$tzone
[1] "US/Pacific" "PST"        "PDT"      

>  Sys.putenv(TZ='GMT')
>  z <- as.POSIXlt(Sys.time())
>  attributes(z)$tzone
[1] "GMT"

>  Sys.putenv(TZ='US/Eastern')
>  z <- as.POSIXlt(Sys.time())
>  attributes(z)$tzone
[1] "US/Eastern" "EST"        "EDT"      

>  z <- as.POSIXlt(c('2005-1-1','2005-6-1'))
>  names(attributes(z))
[1] "names" "class"


-Don

At 11:57 AM +0200 7/7/05, Uwe Ligges wrote:
>Martin Keller-Ressel wrote:
>
>>  Thank you Don for your hints. I have checked my environment vairable TZ 
>>  again. But everything is set correctly. I think the problem is with 
>>  Sys.timezone(). Maybe it is a conflict between how my system formats the 
>>  time/date and what Sys.timezone() expects.
>>  This is what I get on my system:
>>
>>
>>>Sys.getenv("TZ")
>>
>>      TZ
>>  "GMT"
>>
>>>Sys.time()
>>
>>  [1] "2005-07-07 07:32:39 GMT"
>>
>>  ## everything fine so far
>>
>>
>>>Sys.timezone()
>>
>>  [1] NA
>>
>>  ## This is what Sys.timezone looks like:
>>
>>>Sys.timezone
>>
>>  function ()
>>  {
>>       z <- as.POSIXlt(Sys.time())
>>       attr(z, "tzone")[2 + z$isdst]
>>  }
>>  <environment: namespace:base>
>>
>>>z <- as.POSIXlt(Sys.time())
>>>attributes(z)
>>
>>  $names
>>  [1] "sec"   "min"   "hour"  "mday"  "mon"   "year"  "wday"  "yday"  "isdst"
>>
>>  $class
>>  [1] "POSIXt"  "POSIXlt"
>>
>>  $tzone
>>  [1] "GMT"
>>
>>
>>>attr(z,"tzone")
>>
>>  [1] "GMT"
>>
>>>z$isdst
>>
>>  [1] 0
>>
>>>attr(z,"tzone")[2]
>>
>>  [1] NA
>>
>>  I dont understand why Sys.timezone doesn't use attr(z,"tzone") but tries 
>>  to read its (2+z$isdst)-th element.
>>  Of course it would be easy to write a workaround, but I wonder why nobody 
>>  else is having this problem.
>
>
>I can confirm for R-2.1.1 under Windows NT 4.0 and it looks like a bug
>(somewhere down the way from as.POSIXlt). Don't have the time to look at
>it more closely, perhaps Brian knows it at once?
>If this is not already in the bug repository (please check at first),
>can you submit a report, please? Thanks!
>
>Uwe Ligges
>
>
>
>
>
>>  best regards,
>>
>>  Martin Keller-Ressel
>>
>>
>>
>>  On Wed, 06 Jul 2005 14:45:25 -0000, Don MacQueen <macq at llnl.gov> wrote:
>>
>>
>>>How did you set the TZ system variable?
>>>If you did not use Sys.putenv(), try using it instead.
>>>Otherwise, I think you have to ask the package maintainer.
>>>
>>>You may be misleading yourself by using Sys.time() to test whether TZ is 
>>>set.
>>>What does Sys.getenv() tell you?
>>>
>>>I get a timezone code from Sys.time() even when TZ is not defined (see 
>>>example below).
>  >>(but I do have a different OS)
>  >>
>  >>
>  >>> Sys.timezone()
>  >>
>  >>[1] ""
>  >>
>  >>> Sys.time()
>  >>
>  >>[1] "2005-07-06 07:34:15 PDT"
>  >>
>  >>> Sys.getenv('TZ')
>  >>
>  >>TZ
>  >>""
>  >>
>  >>> Sys.putenv(TZ='US/Pacific')
>>>>  Sys.timezone()
>>>
>>>[1] "US/Pacific"
>>>
>>>>  Sys.getenv('TZ')
>>>
>>>            TZ
>>>"US/Pacific"
>>>
>>>>  Sys.time()
>>>
>>>[1] "2005-07-06 07:34:38 PDT"
>>>
>>>
>>>>  Sys.putenv(TZ='GMT')
>>>>  Sys.time()
>>>
>>>[1] "2005-07-06 14:35:45 GMT"
>>>
>>>
>>>>  version
>>>
>>>           _                       platform powerpc-apple-darwin7.9.0
>>>arch     powerpc                 os       darwin7.9.0             
>  >>system   powerpc, darwin7.9.0    status                           
>>>major    2                       minor    1.1                     
>>>year     2005                    month    06                      
>>>day      20                      language R                       
>>>At 9:55 AM +0000 7/5/05, Martin Keller-Ressel wrote:
>>>
>>>>Hi,
>>>>
>>>>Im using R 2.1.1 and running Code that previously worked (on R 2.1.0 I 
>>>>believe) using the 'timeDate' function from the fCalendar package. The 
>>>>code now throws an error:
>>>>
>>>>Error in if (Sys.timezone() != "GMT") warning("Set timezone to GMT!")
>>>>
>>>>However I have read the documentation of the fCalendar package and I 
>>>>have set my system variable TZ to GMT.
>>>>I tracked the error down to the function Sys.timezone() which returns 
>>>>NA in spite of what Sys.time() returns.
>>>>
>>>>
>>>>>  Sys.timezone()
>>>>
>>>>[1] NA
>>>>
>>>>
>>>>>  Sys.time()
>>>>
>>>>[1] "2005-07-05 08:41:53 GMT"
>>>>
>>>>My version:
>>>>
>>>>
>>>>>  version
>>>>
>>>>           _
>>>>platform i386-pc-mingw32
>>>>arch     i386
>>>>os       mingw32
>>>>system   i386, mingw32
>>>>status
>>>>major    2
>>>>minor    1.1
>>>>year     2005
>>>>month    06
>>>>day      20
>>>>language R
>>>>
>>>>Any help is appreciated,
>>>>
>>>>Martin Keller-Ressel
>>>>
>>>>
>>>>---
>>>>Martin Keller-Ressel
>>>>Research Unit of Financial and Actuarial Mathematics
>>>>TU Vienna
>>>>
>>>>______________________________________________
>>>>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
>>>
>>>
>>
>>
>>
>
>______________________________________________
>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


-- 
--------------------------------------
Don MacQueen
Environmental Protection Department
Lawrence Livermore National Laboratory
Livermore, CA, USA




More information about the R-help mailing list