Ceci est couvert dans le manuel , mais il n'est pas toujours évident de savoir comment travailler avec les dates/heures. La spécification SQL est un peu bizarre.
Dans le cas de votre question, il n'est pas clair si vous souhaitez stocker l'heure en UTC mais l'afficher dans l'heure locale du serveur (TimeZone
), ou si vous voulez ignorer TimeZone
et toujours l'afficher en UTC. Je suppose que ce dernier.
Pour les horodatages, vous utiliserez simplement AT TIME ZONE
deux fois, comme :
SELECT TIMESTAMP '2013-08-13 00:00:00' AT TIME ZONE 'Australia/Sydney' AT TIME ZONE 'UTC';
Vous devez utiliser AT TIME ZONE
deux fois. Une fois pour convertir l'entrée timestamp
à timestamptz
selon l'argument fuseau horaire, puis un autre pour le convertir en un timestamp
à UTC.
Malheureusement, à cause de la manière (insensée de l'OMI) dont la spécification SQL définit AT TIME ZONE
pendant TIME
, vous ne pouvez pas faire la même chose pour TIME
. Vous devrez manipuler le TimeZone
variable à la place :
SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';
Cela vous laisse toujours avec un timetz
pas une time
. Donc sa valeur d'affichage change avec le timezone
réglage.