Utilisation d'Oracle 9.2i j'ai besoin pour obtenir le décalage de différentes dates d'un timezones par rapport à un autre fuseau horaire, auparavant je l'ai fait en tant que telledécalages Timezone dans Oracle
select
(TO_DATE('10-Oct-2010 09:00:00','DD-Mon-YYYY HH24:Mi:SS') -
TO_DATE(TO_CHAR(FROM_TZ(to_timestamp('10-Oct-2010 09:00:00','DD-Mon-YYYY HH24:Mi:SS'), 'Australia/Victoria')
AT TIME ZONE 'Australia/West' , 'DD-Mon-YYYY HH24:Mi:SS'),'DD-Mon-YYYY HH24:Mi:SS'))
from dual
qui, tout en un peu en désordre, a bien fonctionné pour mes besoins. Maintenant, le problème est que cela ne semble pas tenir compte de l'heure d'été. Le décalage horaire entre Victoria et l'Australie occidentale le 10 octobre est en fait de 3 heures, et non de 2 heures (car ma requête revient actuellement).
Maintenant, c'est étrange, car je pensais que FROM_TZ est moyen de gérer DST. Et même étranger, si je compare à l'heure GMT j'obtenir les bons résultats ..
select FROM_TZ(to_timestamp('10-Oct-2010 00:00:00','DD-Mon-YYYY HH24:Mi:SS'), 'GMT') AT TIME ZONE 'Australia/West'
from dual
FROM_TZ(TO_TIMESTAMP('10-OCT-2
------------------------------
10-OCT-10 08.00.00.000000000 AM AUSTRALIA/WEST
correcte
select FROM_TZ(to_timestamp('10-Oct-2010 00:00:00','DD-Mon-YYYY HH24:Mi:SS'), 'GMT') AT TIME ZONE 'Australia/Victoria'
from dual
FROM_TZ(TO_TIMESTAMP('10-OCT-2
------------------------------
10-OCT-10 11.00.00.000000000 AM AUSTRALIA/VICTORIA
Correct
select FROM_TZ(to_timestamp('10-Oct-2010 00:00:00','DD-Mon-YYYY HH24:Mi:SS'), 'Australia/Victoria') AT TIME ZONE 'Australia/West'
from dual
FROM_TZ(TO_TIMESTAMP('10-OCT-2
------------------------------
09-OCT-10 10.00.00.000000000 PM AUSTRALIA/WEST
Mauvais. 10-Oct-2010 00:00:00 à Victoria est 09-OCT-10 21:00 PM en Australie-Occidentale.
Donc la question est, est-ce un bug? ou suis-je simplement en utilisant ce FROM_TZ .. AT TIME ZONE faux?
Merci.
Mise à jour:
Je pense que cela pourrait être un bogue dans la fonction TO_CHAR, il semble obtenir le mauvais TZ décalage. Alors que FROM_TZ peut correctement passer de GMT à l'heure de Victoria, quand vous essayez d'extraire le décalage TZ de cela, il indique son +10, alors qu'il devrait être +11.
select TO_CHAR(FROM_TZ(to_timestamp('10-Oct-2010 00:00:00','DD-Mon-YYYY HH24:Mi:SS'), 'Australia/Victoria'), 'TZH:TZM')
,FROM_TZ(to_timestamp('10-Oct-2010 00:00:00','DD-Mon-YYYY HH24:Mi:SS'), 'GMT') AT TIME ZONE 'Australia/Victoria'
from dual
TO_CHAR(FROM_TZ(TO_TIMESTAMP(' FROM_TZ(TO_TIMESTAMP('10-OCT-2
--------------------------------------------------------------------------- ------------------------------
+10:00 10-OCT-10 11.00.00.000000000 AM AUSTRALIA/VICTORIA