AT TIME ZONE
při použití na timestamp without timezone
vytvoří timestamp with timezone
(a naopak). A toto timestamp with timezone
je interpretováno v časovém pásmu vaší relace (které je ve vašem případě nuceno na UTC
).
Takže výraz EXTRACT (dow from time at time zone 'Brisbane/Australia')
neextrahuje den v Brisbane v time
(UTC) , extrahuje den odpovídající převedenému time
z pohledu někoho, kdo virtuálně žije v časovém pásmu UTC.
Jako příklad, když to píšu, když předstírám, že jsem v UTC:
=> set timezone to 'UTC'; => select now(),now() at time zone 'Australia/Brisbane'; now | timezone ------------------------------+--------------------------- 2013-10-27 18:01:03.15286+00 | 2013-10-28 04:01:03.15286
Dobře, je neděle 18:01 v UTC a pondělí 4:01 v Brisbane
Ale pokud použijete posunutí časového pásma na timestamp without timezone
:
select now(),now()::timestamp at time zone 'Australia/Brisbane'; now | timezone -------------------------------+------------------------------- 2013-10-27 18:01:57.878541+00 | 2013-10-27 08:01:57.878541+00
Všimněte si, jak se druhý sloupec liší od předchozího výsledku. Ve skutečnosti je to 20 hodin volna od Brisbane vyjádřeno v UTC:je to pravděpodobně technicky správná odpověď na otázku, která nedává moc smysl.
Pravděpodobně chcete toto:
EXTRACT (dow from (time AT TIME ZONE 'UTC') at time zone 'Brisbane/Australia')=0
která by měla odpovědět:dělá datum a čas time
měřeno v UTC odpovídá neděli v Brisbane?