PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment connaître un fuseau horaire d'un horodatage dans postgresql 8.3

Je suppose que vous avez une colonne nommée ct qui a le type TIMESTAMPTZ dans le tableau t . Ensuite, vous pouvez utiliser :

SELECT EXTRACT(TIMEZONE FROM ct) FROM t;

pour obtenir le décalage du fuseau horaire en secondes. Cela vous donne 3600 depuis UTC /GMT cela signifie soit GMT+1 , CET ou peu importe. La valeur renvoyée dépend de votre TIMEZONE réglage.

Exemple (j'habite en Allemagne, le fuseau horaire actuel est GMT+1 /CET ):

test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz;
      timestamptz       
------------------------
 2008-01-01 18:00:00+01

test=# set timezone to 'gmt';
SET
test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz;
      timestamptz       
------------------------
 2008-01-01 17:00:00+00

Comme vous pouvez le voir, il produit toujours quoi que ce soit dans le fuseau horaire configuré. Ainsi, le décalage que vous obtiendrez avec EXTRACT(TIMEZONE FROM ...) dépend de votre TIMEZONE paramètre. Le fuseau horaire qui a été donné sur INSERT est perdu, car il ne vaut pas la peine d'être sauvé. Ce qui compte, c'est que tout est correct et que cela ne doit pas dépendre du TIMEZONE paramètre. PostgreSQL le fait très bien.