PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да преобразувам местното време в UTC?

Това е описано в ръководството , но не винаги е очевидно как всъщност да работите с дати/часове. SQL спецификацията е малко странна.

В случая на вашия въпрос не е ясно дали искате да съхранявате часа в UTC, но да го показвате в местното време на сървъра (TimeZone ), или дали искате да игнорирате TimeZone и винаги го показвайте като UTC. Ще приема последното.

За времеви клеймца просто бихте използвали AT TIME ZONE два пъти, като:

SELECT TIMESTAMP '2013-08-13 00:00:00' AT TIME ZONE 'Australia/Sydney' AT TIME ZONE 'UTC';

Трябва да използвате AT TIME ZONE два пъти. Веднъж за преобразуване на въведеното timestamp към timestamptz според аргумента часова зона, след това друг, за да го преобразувате в timestamp в UTC.

За съжаление поради (безумния IMO) начин, по който SQL спецификацията дефинира AT TIME ZONE за TIME , не можете да направите същото за TIME . Ще трябва да манипулирате TimeZone вместо променлива:

SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';

Това все още ви оставя с timetz не е time . Така че показваната му стойност се променя с timezone настройка.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres, прости заявки, които не използват индекс

  2. Linux файлови системи и контролни точки на PostgreSQL

  3. Проблеми с производителността на групово вмъкване на PostgreSQL/JooQ при зареждане от CSV; как да подобря процеса?

  4. Postgres пълнотекстово търсене със синоними

  5. Прехвърляне на H2 данни към PostgreSQL