Jest to opisane w podręczniku , ale nie zawsze jest oczywiste, jak właściwie pracować z datami/godzinami. Specyfikacja SQL jest nieco dziwna.
W przypadku Twojego pytania nie jest jasne, czy chcesz przechowywać czas w UTC, ale wyświetlać go w czasie lokalnym serwera (TimeZone ) lub czy chcesz zignorować TimeZone i zawsze wyświetlaj go jako UTC. Zakładam to drugie.
W przypadku znaczników czasu użyj po prostu AT TIME ZONE dwa razy, np.:
SELECT TIMESTAMP '2013-08-13 00:00:00' AT TIME ZONE 'Australia/Sydney' AT TIME ZONE 'UTC';
Musisz użyć AT TIME ZONE dwa razy. Raz, aby przekonwertować wejściowy timestamp do timestamptz zgodnie z argumentem strefa czasowa, a następnie inny, aby przekonwertować to na timestamp w UTC.
Niestety ze względu na (szalony IMO) sposób, w jaki specyfikacja SQL definiuje AT TIME ZONE na TIME , nie możesz zrobić tego samego przez TIME . Będziesz musiał manipulować TimeZone zamiast tego zmienna:
SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';
To nadal daje ci timetz nie time . Tak więc jego wyświetlana wartość zmienia się wraz ze TimeZone ustawienie.