IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

Dates GMT et récupération en heure locale


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut Dates GMT et récupération en heure locale
    Bonjour,

    j'ai besoin simple : stocker dans un champ timestamp sans time zone des heures GMT.

    Pour cela j'ai créé un champ timestamp simple sans time zone, et configuré postgresql (dans le .conf) la ligne 'timezone = GMT'.


    Maintenant une appli à besoin de ces timestamp, mais convertis en heure locale de la machine qui fait tourner le serveur postgresl (en gros GMT+2).

    Quelle requête dois-je faire pour que çà convertisse l'heure ? es-ce possible avec une colonne timestamp sans time zone ?

    Merci.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT (t at time zone 'GMT') at time zone 'GMT-2'
    Ca doit être équivalent à ce que fait PG quand on lit un timestamp with time zone. Ce type ne stocke pas la timezone (contrairement à ce que son nom suggère), mais ajuste la date/heure à chaque accès en fonction de la timezone du client.

  3. #3
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut
    hum, çà m'arrange pas en fait, parcequ'il faut définir dans la requête la tz de destination.

    j'aurais aimé un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT (t at time zone 'GMT') at local time zone
    Par contre, par rapport au type 'timestamp avec time zone'

    Quel est la différence ? je n'ai pas très bien saisit, par exemple si je fais un insert sans rien changer dans la syntaxe, es-ce que c'est compatible avec la vers sans time zone ?

    Pareil pour un select ?

    En fait j'ai besoin de changer au minium du code qui fait les requête, mais faire en sorte d'avoir une sorte de conversion la plus aisée possible (avec obligatoirement les données en base en GMT)

    Merci tout de même.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Si tu ne souhaites pas spécifier la timezone cible, en fait c'est plus simple, car la conversion en timezone locale est implicite.
    Normalement, un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT t at time zone 'GMT'
    fait l'affaire, lorsque t est du type timestamp without time zone.

    Comme tu as fixé la timezone GMT dans la conf de ton serveur, moi je vérifierais quand même aussi que ça ne se répercute sur les clients.
    Faire SHOW timezone dans un client pour vérifier, si ça renvoie localtime, c'est bon, si ça renvoie GMT ce n'est pas bon.

  5. #5
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut
    hum, SHOW timezone dans un phpPgAdmin me sort GMT, evidemment phpPgAdmin tourne sur la même machine que postgresql.

    De même pour un PGAdmin 3 depuis une machine sur le réseau.


    Par contre tu me dit que c'est pas bon, mais çà semble correspondre à la conf que j'ai fait de postgresql.


    Que faudrais-t-il faire ? configurer postgresql en local et mettre les données timestamp sans time zone tel quel (en GMT) ?

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    OK donc la timezone définie dans la conf serveur se propage aux clients. Je dis que ce n'est pas bon dans le sens où les clients se croyant en GMT, une conversion de GMT vers la timezone locale ne convertira rien du tout, puisque la timezone locale est justement GMT.

    Sachant ça, je dirais que forcer GMT dans la conf serveur ne me semble pas la bonne option.
    Laisser le serveur en timezone locale et stocker du GMT dans une colonne de type timestamp doit fonctionner.
    Quand le code client fait INSERT... VALUES ('2009-08-04 01:02:02') dans la colonne elle sera insérée telle quelle sans conversion et elle est censée représenter du GMT d'après la logique de l'appli.
    En récupération, SELECT date FROM ... récupérera la valeur telle quelle sans conversion puisque c'est du type timestamp
    et par contre SELECT date at time zone 'GMT' la convertira automatiquement en heure locale (et renvoie du type timestamptz)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [11gR2] Passer une date/heure locale en GMT/BST
    Par shaun_the_sheep dans le forum SQL
    Réponses: 2
    Dernier message: 13/04/2015, 16h25
  2. Import csv, convertion date GMT à heure locale
    Par vinch999 dans le forum DB2
    Réponses: 0
    Dernier message: 02/05/2011, 11h27
  3. [Dates] Conversion heure GMT vers heure local
    Par ggjedi dans le forum Langage
    Réponses: 3
    Dernier message: 19/10/2006, 10h17
  4. Conversion d'heures de GMT en Heure locale
    Par speedy1496 dans le forum Oracle
    Réponses: 7
    Dernier message: 25/07/2005, 16h59
  5. heure locale et GMT
    Par Dauphin dans le forum C++Builder
    Réponses: 3
    Dernier message: 10/06/2005, 06h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo