[TZInfo-users] TzInfo timezone base question

Mark Van De Vyver mvyver at gmail.com
Wed Feb 6 15:29:30 EST 2008


Hi Philip,

On Feb 7, 2008 7:11 AM, Philip Ross <phil.ross at gmail.com> wrote:
> On 06/02/2008, Mark Van De Vyver <mvyver at gmail.com> wrote:
> > On Feb 7, 2008 12:43 AM, Philip Ross <phil.ross at gmail.com> wrote:
> > > On Unix based architectures, the local timezone can be changed at
> > > runtime by setting the TZ environment variable. This will affect all
> > > Times constructed after changing the environment variable. For
> > > example:
> > >
> > > > ENV['TZ']='Australia/Melbourne'
> > > => "Australia/Melbourne"
> > > > Time.parse("09:30").iso8601
> > > => "2008-02-07T09:30:00+11:00"
> > > > ENV['TZ']='Asia/Karachi'
> > > => "Asia/Karachi"
> > > > Time.parse("09:30").iso8601
> > > => "2008-02-06T09:30:00+05:00"
> >
> > Thanks for the clarification, so there is no way to achieve a similar
> > effect using tzinfo.
>
> There is no equivalent of the parse function in TZInfo. You could use
> parse and do the following though:
>
> tz = TZInfo::Timezone.get(source_tz)
> src_time_as_utc = tz.local_to_utc(Time.parse("09:30" + " UTC", tz.now))

Sorry I wasn't clearer, but in my case the time string 09:30 refers to
the source_tz, which is _not_ my local tz nor UTC, and this source tz
may change in different calls to the method I'm trying to write.  I'd
like to get a time object that is in the source_tz, but have abandond
this idea, and will settle for an iso8601 string that contains the
time in the source tz.

> Adding " UTC" to the time forces it to be parsed as a UTC timestamp
> and causes any daylight savings rules of the system timezone to be
> ignored. TZInfo will still treat the time value as if it were in local
> time (it ignores the timezone aspect of the Time).

Thanks I suppose I could + "<something-else>".  But I may be getting
confused again, I'd like TZInfo to treat the time as if it were in the
source_tz rather than my local tz.

>
> Passing tz.now as the second argument to Time.parse is required in
> order to make sure you are dealing with the correct date.
>
> > OK this is where I got a little confused - apologies if this is
> > obvious, so it seems to do what I want I can't use 'parse', but
> > instead will have to extract the hrs and minutes, then use:
> >
> > tz = TZInfo::Timezone.get(source_tz)
> > src_time_as_utc = tz.local_to_utc(Time.local(2005,8,29,src_hrs,src_mins,0))
>
> This would work too. TZInfo will just read the year, month, day, hour,
> minute and second of the Time passed to local_to_utc and ignore the
> timezone. It doesn't matter if Time.local returns a different timezone
> to source_tz.

Sorry, I'm confused, I thought that by calling  tz =
TZInfo::Timezone.get(source_tz), it means that in a call to
'tz.local_to_utc' that the 'local in 'local_to_utc' refers to the
source_tz and not the system's tz.  Is this correct?

Regards
Mark

>
> I would use Time.utc instead of Time.local though. If you specified a
> time that fell in a transition between standard and daylight savings
> time of the system timezone, then you might get an unexpected result
> with Time.local.
>
> Regards,
>
> Phil
>
> --
> Phil Ross
> http://tzinfo.rubyforge.org/ -- DST-aware timezone library for Ruby
> _______________________________________________
> TZInfo-users mailing list
> TZInfo-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/tzinfo-users
>


More information about the TZInfo-users mailing list