Thread: Timezone calculation question

Timezone calculation question

From
Роман Маширов
Date:
Seems I've missed something important about time zones. On my server
i've got local timezone 'W-SU' (Moscow time):

=> show timezone;
 TimeZone
----------
 W-SU

=> select now();
              now
-------------------------------
 2009-03-24 13:23:39.655057+03

Till now all seems ok. Than i'm trying to figure out local time at near
region:

=> select now() at time zone 'UTC+4';
          timezone
----------------------------
 2009-03-24 06:28:30.383373


select now() at time zone 'UTC+3';
          timezone
----------------------------
 2009-03-24 07:24:11.011075

Seems like zone offset been added twice...
Server 8.3.5, OS FreeBSD 7.0-RELEASE

Which way should i get correct local time, when i've got timestamp with
timezone and name of the target timezone?

Thanks beforehand
--
MRJ



Re: Timezone calculation question

From
Tom Lane
Date:
=?UTF-8?B?0KDQvtC80LDQvSDQnNCw0YjQuNGA0L7Qsg==?= <mrj@nandu.ru> writes:
> Seems I've missed something important about time zones. On my server
> i've got local timezone 'W-SU' (Moscow time):

> => show timezone;
>  TimeZone
> ----------
>  W-SU

> => select now();
>               now
> -------------------------------
>  2009-03-24 13:23:39.655057+03

> Till now all seems ok. Than i'm trying to figure out local time at near
> region:

> => select now() at time zone 'UTC+4';
>           timezone
> ----------------------------
>  2009-03-24 06:28:30.383373

That's not "near" Moscow.  What's confusing you is that the sign
conventions are different --- in time zone names, plus means west
of Greenwich, but elsewhere (in particular, in timestamp values)
plus means east of Greenwich.

Don't blame us, blame POSIX and ISO for not talking to each other
when they made the relevant standards.  Note the fine print here:
http://developer.postgresql.org/pgdocs/postgres/datatype-datetime.html#DATATYPE-TIMEZONES

            regards, tom lane