web-dev-qa-db-fra.com

Convertir un fuseau horaire UTC dans postgresql en EST

Je suis nouveau dans PostgreSQL et je me demandais s’il existait un moyen direct de convertir les valeurs d’horodatage d’une table dans un fuseau horaire différent à l’aide d’une fonction. Dans mon cas, il est UTC to EST.

Ce sont les valeurs par exemple que je dois convertir en EST (pas seulement une valeur mais toutes les valeurs du tableau)

date
-------------------
2015-10-24 16:38:46
2016-01-19 18:27:00
2016-01-24 16:14:34
2016-02-09 23:05:49
2016-02-11 20:46:26
21
Subu Ganesh

Ici à Londres, nous avons actuellement une heure d'avance sur UTC. Donc, si je prends votre fuseau horaire sans horodatage et que je dis qu'il est en UTC, je le ferai imprimer pour mon fuseau horaire local.

richardh=> SELECT ((timestamp '2015-10-24 16:38:46') AT TIME ZONE 'UTC');
        timezone        
------------------------
 2015-10-24 17:38:46+01
(1 row)

Mais vous voulez "EST" qui semble être quelque part dans les Amériques, à en juger par la valeur retournée. Vous pouvez envelopper l'expression dans une petite fonction SQL si vous le souhaitez.

richardh=> SELECT ((timestamp '2015-10-24 16:38:46') AT TIME ZONE 'UTC') AT TIME ZONE 'EST';
      timezone       
---------------------
 2015-10-24 11:38:46
(1 row)

Edit: comment le faire dans une requête

SELECT ((stored_timestamp AT TIME ZONE 'UTC') AT TIME ZONE 'EST') AS local_timestamp
FROM my_table;

Vous voudrez probablement un livre d'introduction à SQL si ce genre de problème vous pose des problèmes.

31
Richard Huxton

De même Exécuter 

SELECT '2015-10-24 16:38:46'::timestamp AT time zone 'EST';

timezone
------------------------
 2015-10-24 21:38:46+00
(1 row)
8
Kevin Li

Vous devez toujours stocker la référence principale d'une date au format UTC et la convertir en fuseau horaire dans vos requêtes ou stocker la version de fuseau horaire spécifique des données dans une autre colonne. La raison en est qu'il est facile et rapide de convertir une date de l'heure UTC en un autre fuseau horaire, à condition que vous sachiez que le fuseau horaire dans lequel elle est stockée est celui de l'heure UTC. Cela supprime les devinettes. Vous pouvez également enregistrer la date AVEC le fuseau horaire.

Si vous avez une opération qui renseigne automatiquement la date avec l'horloge système de votre serveur, vous pouvez soit: __. A: modifier l'opération pour utiliser l'heure UTC B: modifier l'horloge système du serveur en UTC.

0
user33072