Re: Fun avec les TZ

"Daniel Verite" <[email protected]> Sun, 22 Oct 2017 09:27:53 +0200
Newsgroups gmane.comp.db.postgresql.french
Message-ID <[email protected]>
	Bruno Friedmann wrote:

> 'Sat Oct 21 15:01:06 GMT+02:00 2017'::timestamptz,
> 'Sat Oct 21 15:01:06 GMT+02:00 2017'::timestamp,
> 'Sat Oct 21 15:01:06 +02:00 2017'::timestamptz;
> 
> 2017-10-21 19:01:06+02
> 2017-10-21 15:01:06
> 2017-10-21 15:01:06+02
> 
> On voit bien que l'interprétation de GMT+2 donne un résultat
> abhérant de 19h00 pour un 15h00 CEST (c'est genre +2+2).

En fait le résultat est juste parce que pour la norme POSIX,
GMT+02:00 c'est 2 heures à l'ouest du méridien de Greenwich,
au contraire de l'expression de la 3eme colonne qui fait référence
à la norme ISO-8601, orientée dans l'autre sens (2 heures à l'est
de Greenwich), celui qui est utilisé le plus souvent.
Quand on est 2h à l'est de GMT, par exemple l'heure d'été française,
on est bien décalé de 4h par rapport à un fuseau qui serait 2h à
l'ouest de GMT.

Cf la doc:
https://doc.postgresql.fr/10/datatype-datetime.html

" Un autre problème à conserver en tête est que, pour les noms des
  fuseaux horaires POSIX, les décalages positifs sont utilisés pour
  les emplacements situés à l'ouest de Greenwich. Partout ailleurs,
  PostgreSQL™ suit la convention ISO-8601 pour qui les décalages
  positifs de fuseaux horaires concernent l'est de Greenwich"

La même confusion existe en-dehors de Postgres,
par exemple sur un système Ubuntu, avec la commande date
du système et une conf locale sur Europe/Paris:

$ date 
dimanche 22 octobre 2017, 09:23:06 (UTC+0200)

$ TZ=GMT+2 date
dimanche 22 octobre 2017, 05:23:06 (UTC-0200)

parce que TZ suit POSIX alors que l'affichage par défaut
de la date suit l'autre convention.

-- 
Daniel Vérité
PostgreSQL-powered mailer: http://www.manitou-mail.org
Twitter: @DanielVerite


--
Envoi via la liste pgsql-fr-generale ([email protected])