Sorry for not seeing this thread before -- the RSS feed from this
group seems to be a bit flaky (anyone else noticing this?)
> The problem is we use a shared Oracle database which has its timezone
> set to US/Pacific, and we don't have authority or the ability to
> change this.
My (limited) understanding is that this may not actually be possible.
There are times which can't be converted from Pacific back to GMT due
to Daylight savings. Specifically when you're 'leaping back' there
are two 2:34 AMs, and when you spring forward there are none. So
taking a time in that TZ back to gmt (or to any other zone) isn't
possible.
To clarify the DST conversion issue: the issue arises when you store
timestamps without offest or DST info -- e.g., a MySQL datetime field,
which stores timestamps in the "%Y-%m-%d %H:%M:%S" format.
In zones that observe DST, during the "fall back" period there's one
hour that repeats itself -- first in daylight savings time, and then
in standard time. The database, however, is not given the information
to disambiguate between the two:
t1 = Time.local(2008,11,2,0,34) + 1.hour
=> Sun Nov 02 01:34:00 -0500 2008
t2 = Time.local(2008,11,2,0,34) + 2.hours
=> Sun Nov 02 01:34:00 -0600 2008
t1.to_s(:db)
=> "2008-11-02 01:34:00"
t2.to_s(:db)
=> "2008-11-02 01:34:00"
The upshot is, if you're storing local times from a DST-observing zone
in a standard datetime column, you can't store the full range of time
-- there would be one hour per year that you couldn't represent.
> I would be willing to put together a patch that does one of the
> following:
> 1) Obeys the config.active_record.default_timezone setting and adjusts
> based on that
Assuming it's possible to do this, I think that this is a fine way to
have it work.
Actually, we're very close to having this working -- we'd just need to
tweak TimeWithZone#to_s(:db) to report the time relative to the system
local zone if config.active_record.default_timezone == :local.
Granted, the datetime column caveat I explained above would be an
issue with this setup, but this has always been a limitation of
config.active_record.default_timezone == :local.
Nate, if you still want to pull together a patch and need a bit more
guidance, feel free to email me.
Geoff