>>>>> "hernan" == hernan gonzalez <hgonza...@gmail.com> writes:

 >> Perhaps the OP should explain exactly what real-world problems
 >> he's trying to solve.  As noted in the discussion you linked,
 >> there's not a lot of enthusiasm around here for getting closer to
 >> the spec's datetime handling simply because it's the spec; that
 >> part of the spec is just too broken for that to be a credible
 >> argument.

 hernan> I'm not much interested in the compliance with the ANSI SQL
 hernan> spec, I agree in this regard it is unsatisfactory (to put it
 hernan> midly).  But I'm also disatisfied with the current Postgresql
 hernan> implementation, the types TIMESTAMP and TIMESTAMP WITH
 hernan> TIMEZONE are in the middle of being SQL compliant and being
 hernan> really useful. The support of timezones is really crippled
 hernan> now.

Crippled how?

The example you gave is easily handled in pg as follows:

 hernan>  - John records in his calendar a reminder for some event at
 hernan> datetime 2010-Jul-27, 10:30:00, with TZ "Chile/Santiago",
 hernan> (GMT+4 hence it corresponds to UTC time 2010-Jul-27
 hernan> 14:30:00). But some days afterwards, his government decides
 hernan> to change the country TZ to GMT+5.

 hernan> Now, when the day comes... should that reminder trigger at
 hernan>   A) 2010-Jul-27 10:30:00  "Chile/Santiago"  = UTC time  2009-Jul-27 
15:30:00
 hernan> or
 hernan>   B) 2010-Jul-27  9:30:00  "Chile/Santiago"  = UTC time  2009-Jul-27 
14:30:00 ?

 hernan> There is no correct answer, unless one knows what John
 hernan> actually meant when he said "please ring me at "2010-Jul-27,
 hernan> 10:30:00 TZ=Chile/Santiago" Did he mean a "civil date-time"
 hernan> ("when the clocks in my city tell 10:30")? In that case, A)
 hernan> is the correct answer.  Or did he mean a "physical instant of
 hernan> time", a point in the continuus line of time of our universe,
 hernan> say, "when the next solar eclipse happens". In that case,
 hernan> answer B) is the correct one.

If he meant (A), then you store the event as:
(ts,tz) = (timestamp '2010-07-27 10:30:00',
           'Chile/Santiago')
and decide when it happens using (ts at time zone tz), evaluated on
the fly. This way, when you install an update in your zic database to
cope with the change of tz, the computed value of the physical time
changes, but it still shows the same calendar time.

If he meant (B), then you store the event as
(tsz,tz) = (timestamp '2010-07-27 10:30:00' at time zone 'Chile/Santiago',
            'Chile/Santiago')
(note that tsz is now of type timestamp with time zone). This fixes the
physical time, and when you install the zic update, the displayed calendar
time changes, in order to keep the physical time the same.

If you're writing a calendaring app that wants to allow storing both kinds
of events (I've yet to see such an app that actually makes this distinction,
most seem to work on the assumption that timezones don't change), all the
tools for it are currently available in postgres.

-- 
Andrew (irc:RhodiumToad)

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to