PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie konvertiere ich die Ortszeit in UTC?

Dies wird im Handbuch , aber es ist nicht immer offensichtlich, wie man tatsächlich mit Daten/Zeiten arbeitet. Die SQL-Spezifikation ist etwas bizarr.

Im Fall Ihrer Frage ist nicht klar, ob Sie die Uhrzeit in UTC speichern, aber in der lokalen Zeit des Servers anzeigen möchten (TimeZone ) oder ob Sie TimeZone ignorieren möchten und immer als UTC anzeigen. Ich nehme letzteres an.

Für Zeitstempel verwenden Sie einfach AT TIME ZONE zweimal, wie:

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

Sie müssen AT TIME ZONE verwenden zweimal. Einmal, um den eingegebenen timestamp umzuwandeln zu timestamptz entsprechend dem Argument timezone, dann ein weiteres, um das in einen timestamp umzuwandeln um UTC.

Leider wegen der (IMO verrückten) Art und Weise, wie die SQL-Spezifikation AT TIME ZONE definiert für TIME , können Sie dasselbe nicht für TIME tun . Sie müssen die TimeZone manipulieren Variable stattdessen:

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

Damit bleibt immer noch ein timetz keine time . Daher ändert sich sein Anzeigewert mit der timezone Einstellung.