Probablement un classique ... Connaissez-vous une astuce simple pour récupérer une valeur UTC de SYSDATE sur Oracle (le mieux serait de faire fonctionner quelque chose sur la 8e version également).
Pour l'instant, j'ai une fonction personnalisée :(
À votre santé,
Stefan
Vous pouvez utiliser
SELECT SYS_EXTRACT_UTC(TIMESTAMP '2000-03-28 11:30:00.00 -02:00') FROM DUAL;
Vous devrez peut-être également modifier votre fuseau horaire
ALTER SESSION SET TIME_ZONE = 'Europe/Berlin';
Ou lisez-le
SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM dual;
select sys_extract_utc(systimestamp) from dual;
Ne fonctionnera pas sur Oracle 8, cependant.
Habituellement, je travaille avec des colonnes DATE, pas avec un TIMESTAMP plus grand mais plus précis.
Ce qui suit renverra la date UTC actuelle juste comme ça - une DATE.
CAST(sys_extract_utc(SYSTIMESTAMP) AS DATE)
Travailler avec des dates UTC est génial car je n'ai pas à me soucier de la complexité des fuseaux horaires. Seul l'affichage final pour l'utilisateur a besoin de décalages ou d'autres problèmes.
Si vous voulez un horodatage au lieu d'une simple date avec sysdate, vous pouvez spécifier un fuseau horaire à l'aide de l'horodatage système:
select systimestamp at time zone 'UTC' from dual
les sorties: 29-AUG-17 06.51.14.781998000 PM UTC
J'utilise:
SELECT CAST(SYSTIMESTAMP AT TIME ZONE 'UTC' AS DATE) FROM DUAL;
Ça marche bien pour moi.