[R] timezone problems

Martin Keller-Ressel mkeller at fam.tuwien.ac.at
Thu Jul 7 18:44:20 CEST 2005


I cannot reproduce Don's results below on my system. However I do not know  
if timezone names can be expected to be compatible across systems/country  
settings/etc...

I get:
> Sys.putenv(TZ='US/Pacific')
>  z <- as.POSIXlt(Sys.time())
>  attributes(z)$tzone
[1] "\001S/Pacific" "US/"           "Pac"

which looks very ugly. I also tried

> Sys.putenv(TZ='MESZ')
>  z <- as.POSIXlt(Sys.time())
>  attributes(z)$tzone
[1] "\001ESZ" "MES"     "Z"

which is also probably not intended.
I filed a bug report a few hours ago (#7994) but only pointed out the  
problems regarding timezone 'GMT' discussed in the last mail, not the  
'new' problems associated with setting another timezone.

Martin Keller-Ressel


On Thu, 07 Jul 2005 14:58:46 -0000, Don MacQueen <macq at llnl.gov> wrote:

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



-- 
Martin Keller-Ressel
Research Unit of Financial and Actuarial Mathematics
TU Vienna




More information about the R-help mailing list