timezone or not timezone (with Go)

Lists: pgsql-fr-generale
From: wilk <wilk(at)flibuste(dot)net>
To: pgsql-fr-generale(at)postgresql(dot)org
Subject: timezone or not timezone (with Go)
Date: 2016-11-30 10:33:28
Message-ID: o1m9to$llpo1m9to$llp$1@blaine.gmane.org@blaine.gmane.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-fr-generale

Bonjour,

J'accède à une bdd en Python et maintenant en Go. Je ne suis pas sûr de
bien comprendre comment manipuler les dates.

Depuis toujours mes dates sont au format timestamp (donc sans time zone)

Hors en Go, avec github.com/lib/pq si je lis une date elle me revient
avec une time zone plus ou moins nulle et quand je la compare avec
time.Now() (=time.Since) j'ai du coup un décalage d'une heure.

db.Exec("create table test (now_timestamp timestamp, now_timestamptz timestamptz)")
db.Exec("insert into test (now_timestamp, now_timestamptz) values (now(),now())")
row := db.QueryRow("select now_timestamp, now_timestamp::timestamptz, now_timestamptz from test")
var now_timestamp time.Time
var now_timestamp_to_tz time.Time
var now_timestamptz time.Time
row.Scan(&now_timestamp, &now_timestamp_to_tz, &now_timestamptz)
fmt.Println("time.Now()=", time.Now())
fmt.Println("now_timestamp=", now_timestamp, "since=", time.Since(now_timestamp))
fmt.Println("now_timestamp::tz=", now_timestamp_to_tz, "since=", time.Since(now_timestamp_to_tz))
fmt.Println("now_timestamptz=", now_timestamptz, "since=", time.Since(now_timestamptz))

time.Now()= 2016-11-30 11:24:26.267574524 +0100 CET
now_timestamp= 2016-11-30 11:24:26.2662 +0000 +0000 since= -59m59.998597748s
now_timestamp::tz= 2016-11-30 11:24:26.2662 +0100 CET since= 1.415004ms
now_timestamptz= 2016-11-30 11:24:26.2662 +0100 CET since= 1.418921ms

Si j'utilise github.com/jackc/pgx j'ai à peu près le même problème

time.Now()= 2016-11-30 11:25:03.652587603 +0100 CET
now_timestamp= 2016-11-30 12:25:03.650999 +0100 CET since= -59m59.998355345s
now_timestamp::tz= 2016-11-30 11:25:03.650999 +0100 CET since= 1.655779ms
now_timestamptz= 2016-11-30 11:25:03.650999 +0100 CET since= 1.659894ms

Sur github il y a bien une issue qui semble parler de ce problème mais je ne suis
pas sûr de bien comprendre.
https://github.com/lib/pq/issues/329

Je ne sais pas s'il y a des gurus Go dans la salle. Autrement, mon correctif consiste à
d'utiliser ::timestampz dans toutes mes requêtes. Mais est-ce bien raisonnable ?

--
William

--
Envoi via la liste pgsql-fr-generale (pgsql-fr-generale(at)postgresql(dot)org)


From: Dimitri Fontaine <dim(at)tapoueh(dot)org>
To: wilk <wilk(at)flibuste(dot)net>
Cc: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: timezone or not timezone (with Go)
Date: 2016-12-02 21:21:23
Message-ID: m2a8cec9ik.fsf@tapoueh.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-fr-generale

wilk <wilk(at)flibuste(dot)net> writes:
> Je ne sais pas s'il y a des gurus Go dans la salle. Autrement, mon correctif consiste à
> d'utiliser ::timestampz dans toutes mes requêtes. Mais est-ce bien raisonnable ?

Non.

Il est indispensable d'utiliser en base de données le type de données
timestamp *avec* Time Zone. Une fois cela en place, la conversion
devient inutile.

Dire quelle heure il est sans dire où on est, cela n'a aucun sens. Entre
humains en général on s'en sort avec le contexte. En général.

http://naggum.no/lugm-time.html
/docs/current/static/datatype-datetime.html#DATATYPE-TIMEZONES

Questions subsidiaires :

1. Combien y a-t'il de TimeZones en France ?
2. En France Métropolitaine ?

--
dim

--
Envoi via la liste pgsql-fr-generale (pgsql-fr-generale(at)postgresql(dot)org)


From: wilk <wilk(at)flibuste(dot)net>
To: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: timezone or not timezone (with Go)
Date: 2016-12-04 17:11:06
Message-ID: o21ina9o21ina$509$1@blaine.gmane.org@blaine.gmane.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-fr-generale


On 02-12-2016, Dimitri Fontaine wrote:
> wilk <wilk(at)flibuste(dot)net> writes:
>> Je ne sais pas s'il y a des gurus Go dans la salle. Autrement, mon correctif consiste à
>> d'utiliser ::timestampz dans toutes mes requêtes. Mais est-ce bien raisonnable ?
>
> Non.
>
> Il est indispensable d'utiliser en base de données le type de données
> timestamp *avec* Time Zone. Une fois cela en place, la conversion
> devient inutile.

Mon problème est que la base est accessible en Python également, ce qui
m'obligerait à modifier l'ancienne app en conséquence.

Je note en tout cas d'aller dans cette direction, merci !

>
> Dire quelle heure il est sans dire où on est, cela n'a aucun sens. Entre
> humains en général on s'en sort avec le contexte. En général.
>
> http://naggum.no/lugm-time.html
> /docs/current/static/datatype-datetime.html#DATATYPE-TIMEZONES
>
>
> Questions subsidiaires :
>
> 1. Combien y a-t'il de TimeZones en France ?
> 2. En France Métropolitaine ?
>

--
William

--
Envoi via la liste pgsql-fr-generale (pgsql-fr-generale(at)postgresql(dot)org)