fonction ne fonctionnait pour moi parce que vous devez définir le fuseau horaire.
Pour avoir fuseau horaire de valeur par défaut avec la zone:
create table somedata (
release_date timestamptz DEFAULT NOW()
)
Créer function:
CREATE OR REPLACE FUNCTION date_display_tz(param_dt timestamp with time zone)
RETURNS text AS
$$
DECLARE var_result varchar;
BEGIN
PERFORM set_config('timezone', 'UTC', true);
var_result := to_char(param_dt , 'YYYY-MM-DD"T"HH24:MI:SS:MS"Z"');
RETURN var_result;
END;
$$ language plpgsql VOLATILE;
Et sortie:
# SELECT
# localtimestamp, current_timestamp,
# to_char(localtimestamp, 'YYYY-MM-DD"T"HH24:MI:SS:MS"Z"'),
# to_char(current_timestamp, 'YYYY-MM-DD"T"HH24:MI:SS:MS"Z"'),
# date_display_tz(localtimestamp), date_display_tz(current_timestamp);
timestamp | now | to_char | to_char | date_display_tz | date_display_tz
----------------------------+-------------------------------+--------------------------+--------------------------+--------------------------+--------------------------
2017-04-27 23:48:03.802764 | 2017-04-27 21:48:03.802764+00 | 2017-04-27T23:48:03:802Z | 2017-04-27T23:48:03:802Z | 2017-04-27T21:48:03:802Z | 2017-04-27T21:48:03:802Z
(1 row)
Regardez this aussi:
Si vous voulez que le serveur renvoie les informations de fuseau horaire respectives de un autre fuseau horaire, je crois que vous devrez utiliser SET TIME ZONE. Sinon, le serveur automatiquement (convertit l'horodatage) et renvoie le fuseau horaire du serveur.
test=# select (current_timestamp at time zone 'UTC') at time zone 'UTC';
timezone
-------------------------------
2005-04-22 16:26:57.209082+09
(1 row)
test=# set time zone 'UTC';
SET
test=# select (current_timestamp at time zone 'UTC') at time zone 'UTC';
timezone
-------------------------------
2005-04-22 07:27:55.841596+00
(1 row)
test=# select (current_timestamp at time zone 'UTC');
timezone
----------------------------
2005-04-22 07:28:48.888154
(1 row)
test=# select (current_timestamp at time zone 'UTC')::timestamptz;
timezone
-------------------------------
2005-04-22 07:38:19.979511+00
(1 row)
Lorsque vous postez sur Stack Overflow, conservez votre scénario et votre code d'exemple aussi courts et simples que possible. Votre requête complexe n'est pas pertinente pour la mise en forme d'une date-heure. Une seule ligne pour sélectionner le moment actuel est suffisante pour démontrer le problème. –
@BasilBourque Je l'ai simplifié. – CallMeNorm
Spécifiez l'info/tag sur le logiciel que vous utilisez pour vous connecter/interroger PostgreSQL. – Abelisto