timezone, how postgres deal with it?

Started by Anibal David Acostaover 13 years ago4 messagesgeneral
Jump to latest
#1Anibal David Acosta
aa@devshock.com

This query returns false

select ('2012-11-20 17:00:00-02:00'::timestamp with time zone) =
('2012-11-20 18:00:00-03:00'::timestamp with time zone)

Why?

Does postgres convert the datetime or just show/hide time zone?

#2Gary Chambers
gwchamb@gwcmail.com
In reply to: Anibal David Acosta (#1)
Re: timezone, how postgres deal with it?

This query returns false
select ('2012-11-20 17:00:00-02:00'::timestamp with time zone) = ('2012-11-20 18:00:00-03:00'::timestamp with time zone)

It's false for me, too. Change '2012-11-20 18:00:00-03:00' to the correct '2012-11-20
16:00:00-03:00' and it will work as you expect.

--
G.

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Gary Chambers (#2)
Re: timezone, how postgres deal with it?

Gary Chambers <gwchamb@gwcmail.com> writes:

This query returns false
select ('2012-11-20 17:00:00-02:00'::timestamp with time zone) = ('2012-11-20 18:00:00-03:00'::timestamp with time zone)

It's false for me, too. Change '2012-11-20 18:00:00-03:00' to the correct '2012-11-20
16:00:00-03:00' and it will work as you expect.

I suppose the OP is confused about the sign of timezone offsets.

When reading/printing timestamptz values we follow ISO 8601, which says
negative offsets are west of Greenwich. Unfortunately, there are other
standards that say the opposite, and just in case you weren't confused
yet, PG follows those other standards in other places :-(. So for
example the timezone name "EST5EDT" refers to five hours west, as does
"-05:00" in a timestamptz value. (The great thing about standards is
there are so many to choose from.)

There's some docs about this at
http://www.postgresql.org/docs/9.2/static/datatype-datetime.html#DATATYPE-TIMEZONES

regards, tom lane

#4Adrian Klaver
adrian.klaver@aklaver.com
In reply to: Anibal David Acosta (#1)
Re: timezone, how postgres deal with it?

On 11/20/2012 01:48 PM, Anibal David Acosta wrote:

This query returns false

select ('2012-11-20 17:00:00-02:00'::timestamp with time zone) =
('2012-11-20 18:00:00-03:00'::timestamp with time zone)

Why?

Does postgres convert the datetime or just show/hide time zone?

Try:
test=> select ('2012-11-20 17:00:00+02:00'::timestamp with time zone) = ('2012-11-20 18:00:00+03:00'::timestamp with time zone);
?column?
----------
t
(1 row)

For explanation see:

http://www.postgresql.org/docs/9.2/interactive/datatype-datetime.html#DATATYPE-TIMEZONES

--
Adrian Klaver
adrian.klaver@gmail.com