Timezone calculation question
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
=?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