PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak przekonwertować czas lokalny na UTC?

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja agregacji Postgresa do obliczania średniej wektorowej prędkości wiatru (wielkość wektora) i kierunku wiatru (kierunek wektora)

  2. PostgreSQL date() ze strefą czasową

  3. Obliczanie skumulowanej sumy dziennej w PostgreSQL

  4. SQL:jak wybrać wiersz z najbardziej znanymi wartościami?

  5. Funkcja dla Postgresql