PostgreSQL - comment afficher la date dans un autre fuseau horaire?

Mon serveur est dans le centre de Temps. Je tiens à rendre des horodateurs, à l'aide de heure de l'est.

Par exemple, je voudrais rendre 2012-05-29 15:00:00 comme 2012-05-29 16:00:00 EDT.

Comment puis-je l'atteindre?

to_char('2012-05-29 15:00:00'::timestamptz at time zone 'EST5EDT', 'YYYY-MM-DD HH24:MI:SS TZ') donne 2012-05-29 16:00:00 (pas de zone).

to_char('2012-05-29 15:00:00'::timestamp at time zone 'EST5EDT', 'YYYY-MM-DD HH24:MI:SS TZ') donne 2012-05-29 14:00:00 CDT (faux).

Celui-ci fonctionne, mais c'est tellement ridiculement compliqué, il doit y avoir un moyen plus facile: replace(replace(to_char(('2012-05-29 15:00:00'::timestamptz at time zone 'EST5EDT')::timestamptz, 'YYYY-MM-DD HH24:MI:SS TZ'), 'CST', 'EST'), 'CDT', 'EDT')

  • Comment le serveur est censé connaître le fuseau horaire à l'abréviation que vous souhaitez afficher? Il ne connaît que le décalage de fuseau horaire
  • Les informations de fuseau horaire n'est pas de la magie noire. Il n'y a pas de raison technique qui rendrait impossible (ou même dur) pour dire que 5/29 est l'heure d'été, Heure de l'est. En fait, PG sait tout - to_char(x, 'TZ') différencie de la CST, de la CDT correctement, et at time zone EST5EDT respecte l'heure d'été ainsi. Le seul bit me manque, c'est élégant, le rendu à l'aide de cette information.
  • Ici, le problème est dans l'étrange choix de la Postgres devs qui timestamp with time zone at _zone_ doit convertir les fuseaux horaires, mais de retour timestamp without time zone.
  • Il y a beaucoup de lieux bizarre autour de la conversion de timestamp <-> timestamptz et à l'aide de at time zone, mais il n'y a vraiment aucun moyen intégré pour rendre fuseau horaire différent, comme fmt_date(x, 'YYYY-MM-DD HH24:MI:SS TZ', 'EST5EDT')?
  • J'ai réfléchi à la même question à un certain moment dans le passé, et aussi loin que je me souvienne, ne pouvait pas trouver un sane solution. Probablement le meilleur que vous pouvez faire est de gérer les fuseaux horaires et de la mise en forme de l'application côté plutôt que dans la base de données, si ce n'est pas vraiment une réponse à votre question.
  • Décevant car il n'est "pas possible" est aussi une réponse valable.

InformationsquelleAutor Konrad Garus | 2012-05-29