[R-SIG-Finance] is there a time-zone adjustment function in R that takes care of day-light saving?

Jeffrey Ryan jeffrey.ryan at lemnica.com
Mon Jan 30 19:30:19 CET 2012


This won't immediately "help" per se, but what you are asking about
*is* possible:

> unclass(as.POSIXct("1970-01-01", tz="UTC"))
[1] 0
attr(,"tzone")
[1] "UTC"
> unclass(as.POSIXct("1970-01-01", tz="America/Chicago"))
[1] 21600
attr(,"tzone")
[1] "America/Chicago"
> unclass(as.POSIXct("1970-01-01", tz="Europe/London"))
[1] -3600
attr(,"tzone")
[1] "Europe/London"
> unclass(as.POSIXct("1970-01-01", tz="Asia/Hong_Kong"))
[1] -28800
attr(,"tzone")
[1] "Asia/Hong_Kong"


The 'trick' is the conversion from string representation initially.
The OS facilities are where the conversion is happening, and you can
effectively trick the system by setting the environment variable for
the duration of the C level call.  Don't ask for details, as they
aren't "R" per se and far too complex for me to explain succinctly,
but note that it is possible.

In fact, that is one way that xts can manipulate times so well, even
with objects that have different TZs assigned.

HTH
Jeff
On Mon, Jan 30, 2012 at 12:07 PM, Michael <comtech.usa at gmail.com> wrote:
> Thanks a lot for the nice example! I should have used that to make a
> reproducible example. I always had trouble making reproducible example.
>
> Basically it explains why I couldn't physically change the index/timestamps
> by either -5 or -4 hours...
>
> The indices are always in GMT/UTC internally...
>
> So the only way to physically change the timestamps is to manipulate them
> by hand or programmatically and externally.
>
> If there is no day-light saving stuff, I could just do align.time by
> 5*60*60; but the day-light saving complicated things... I could no longer
> do 5*60*60 universally to all data in the time series...
>
> Too bad...
>
> On Mon, Jan 30, 2012 at 11:59 AM, Jeffrey Ryan <jeffrey.ryan at lemnica.com>wrote:
>
>> Take a look at the notion of TZ in R (and in general).  The basic idea
>> is offset from UTC.  The POSIXct [R] representation is _always_ UTC
>> internally.  The stuff you 'see' is merely an adjustment on print.
>>
>> You are confounding TZ and OS behavior likely.  Some systems (wonder
>> which ones?) really screw up TZ handling.
>>
>> A search of the list archives, the internals of POSIXct, OS
>> documentation for TZ, etc will get you thinking clearly I hope.  It
>> isn't easy though - xts abstracts away a lot of very very painful
>> ugliness.
>>
>> > ?indexTZ
>> > x <- xts(NA, Sys.time())
>> > x
>>                    [,1]
>> 2012-01-30 11:57:53   NA
>> > indexTZ(x)
>> [1] "America/Chicago"
>> > Sys.setenv(TZ="America/New_York")
>> > x
>>                    [,1]
>> 2012-01-30 11:57:53   NA
>> Warning message:
>> timezone of object (America/Chicago) is different than current
>> timezone (America/New_York).
>> > indexTZ(x)
>> [1] "America/Chicago"
>> > .index(x)
>> [1] 1327946273
>> attr(,"tzone")
>> [1] "America/Chicago"
>> attr(,"tclass")
>> [1] "POSIXct" "POSIXt"
>> > indexTZ(x) <- "America/New_York"
>> > indexTZ(x)
>>                TZ
>> "America/New_York"
>> > x
>>                    [,1]
>> 2012-01-30 12:57:53   NA
>> > .index(x)
>> [1] 1327946273
>> attr(,"tzone")
>>                TZ
>> "America/New_York"
>> attr(,"tclass")
>> [1] "POSIXct" "POSIXt"
>>
>> HTH
>> Jeff
>>
>> On Mon, Jan 30, 2012 at 11:31 AM, Michael <comtech.usa at gmail.com> wrote:
>>  > I have certainly read the doc before I asked.
>> >
>> > But I guess it doesnt do what I want and I should have made myself
>> clear...
>> > sorry for that:
>> >
>> > I created someintraday  timeseries with notime zone initially.
>> >
>> > And then we would like to treat the time series as GMT and convert all
>> the
>> > timestamps into EST/EDT, taking into account of daylight saving stuff.
>> >
>> > And then we will do some subsetting and get a new time series.
>> >
>> > And the we will remove the time zone attributes and from then on treat
>> the
>> > series as under GMT.
>> >
>> > I have played with indexTZ yesterday but couldnt find a way to physically
>> > change the time stamps to the correct one - the index should be adjusted
>> by
>> > -5hours in winters and -4hours in summers... but my index just didnot
>> > change at all...
>> >
>> > What could be the problem? There must be some tricks I didnt know...
>> Please
>> > shed lights on me Thanks a lot!
>> > On Jan 30, 2012 11:01 AM, "Jeffrey Ryan" <jeffrey.ryan at lemnica.com>
>> wrote:
>> >
>> >        [[alternative HTML version deleted]]
>> >
>> > _______________________________________________
>> > R-SIG-Finance at r-project.org mailing list
>> > https://stat.ethz.ch/mailman/listinfo/r-sig-finance
>> > -- Subscriber-posting only. If you want to post, subscribe first.
>> > -- Also note that this is not the r-help list where general R questions
>> should go.
>>
>>
>>
>>  --
>> Jeffrey Ryan
>> jeffrey.ryan at lemnica.com
>>
>> www.lemnica.com
>> www.esotericR.com <http://www.esotericr.com/>
>>
>> R/Finance 2012: Applied Finance with R
>> www.RinFinance.com <http://www.rinfinance.com/>
>>
>> See you in Chicago!!!!
>>
>
>        [[alternative HTML version deleted]]
>
> _______________________________________________
> R-SIG-Finance at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> -- Subscriber-posting only. If you want to post, subscribe first.
> -- Also note that this is not the r-help list where general R questions should go.



-- 
Jeffrey Ryan
jeffrey.ryan at lemnica.com

www.lemnica.com
www.esotericR.com

R/Finance 2012: Applied Finance with R
www.RinFinance.com

See you in Chicago!!!!



More information about the R-SIG-Finance mailing list