Thread: 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