Обсуждение: Getting Hour From a Time in Different Time Zone

Поиск
Список
Период
Сортировка

Getting Hour From a Time in Different Time Zone

От
"Tom Kreiner"
Дата:
I'm working on a web interface that will be taking into account that the 
users will be in different time zones. In one of my queries, I need to 
extract the hour of a time that has been converted to the appropriate time 
zone. Everytime I do this, the hour function gives me he hour in the 
server's time zone, not in the time zone I'm trying to convert to.

For example, the server's time zone is -08. I'm in time zone -05. Assume 
that current_timestamp (for the server) is 9:00 AM. I know that:

SELECT current_timestamp AT TIME ZONE INTERVAL '-05 hours';

gives me 12:00 PM, which is the correct time for my time zone. However, if I 
do:

SELECT hour(timestamp(current_timestamp AT TIME ZONE INTERVAL '-05 hours'));

I get 9. The server is returning the hour for it's designated time zone. In 
essence, it's undoing the time zone change.

I need the hour for the converted time zone time. Has anyone else had this 
problem and found a solution for it? Thanks.

Tom Kreiner
tom_kreiner@hotmail.com

_________________________________________________________________
MSN Photos is the easiest way to share and print your photos: 
http://photos.msn.com/support/worldwide.aspx



Re: Getting Hour From a Time in Different Time Zone

От
Tom Lane
Дата:
"Tom Kreiner" <tom_kreiner@hotmail.com> writes:
> SELECT hour(timestamp(current_timestamp AT TIME ZONE INTERVAL '-05 hours'));

The AT TIME ZONE construct produces a text string, which you are
converting back into a timestamp, which is internally just GMT --- all
notion that it had anything to do with EST time is gone.

You can actually get the above to work in 7.2, though.  It looks like
Thomas changed AT TIME ZONE to not emit timezone in the output string,
which avoids the rotation back to your own zone:


regression=# SELECT current_timestamp;         timestamptz
-------------------------------2002-01-03 10:40:42.901964-05
(1 row)

regression=# SELECT current_timestamp AT TIME ZONE INTERVAL '-08 hours';         timezone
----------------------------2002-01-03 07:40:49.452058
(1 row)

regression=# SELECT "timestamp"(current_timestamp AT TIME ZONE INTERVAL '-08 hours');        timestamp
----------------------------2002-01-03 07:41:19.469686
(1 row)

regression=# SELECT extract(hour from "timestamp"(current_timestamp AT TIME ZONE INTERVAL '-08 hours'));date_part
-----------        7
(1 row)
        regards, tom lane