Oracle Timezone Conversion - PullRequest
       3

Oracle Timezone Conversion

0 голосов
/ 07 сентября 2018

Я использую встроенную функцию оракула from_tz для преобразования часового пояса. Кто-нибудь знает, учитывает ли это изменение летнего времени?

 to_char(from_tz(CAST(enteredondtm AS TIMESTAMP),'UTC') 
         AT TIME ZONE 'PST','YYYY-MM-DD') entered_on_date .

в этой функции значение enterondtm в UTC, которое с помощью этой функции преобразуется в PST. Конверсия происходит правильно. Просто хотел убедиться, что это произойдет при переходе на летнее время.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Да, простое доказательство:

SELECT 
    TIMESTAMP '2018-06-01 00:00:00 PST',
    TIMESTAMP '2018-12-01 00:00:00 PST'
from dual;

01.06.2018 00:00:00 -07:00  01.12.2018 00:00:00 -08:00

Однако, почему вас беспокоит переход на летнее время, если вы выводите YYYY-MM-DD, т. Е. Оно не содержит раз?

Просто примечание, часовой пояс PST может быть неоднозначным, см.

SELECT TZABBREV, TZ_OFFSET(TZNAME), TZNAME
FROM V$TIMEZONE_NAMES
WHERE TZABBREV = 'PST'; 

TZABBREV    TZ_OFFSET(TZNAME)   TZNAME
========================================
PST -05:00  America/Bahia_Banderas
PST -06:00  America/Mazatlan
PST -06:00  America/Boise
PST -06:00  Mexico/BajaSur
PST -06:00  America/Inuvik
PST -07:00  America/Los_Angeles
PST -07:00  America/Hermosillo
PST -07:00  America/Ensenada
PST -07:00  America/Dawson_Creek
PST -07:00  America/Dawson
PST -07:00  America/Creston
PST -07:00  America/Santa_Isabel
PST -07:00  US/Pacific
PST -07:00  PST8PDT
PST -07:00  PST
PST -07:00  US/Pacific-New
PST -07:00  America/Tijuana
PST -07:00  America/Vancouver
PST -07:00  America/Whitehorse
PST -07:00  Canada/Pacific
PST -07:00  Canada/Yukon
PST -07:00  Mexico/BajaNorte
PST -08:00  America/Juneau
PST -08:00  America/Sitka
PST -08:00  Pacific/Pitcairn
PST -08:00  America/Metlakatla

Лучше использовать «настоящее» длинное имя. Существует всего несколько часовых поясов (см. SELECT * FROM V$TIMEZONE_NAMES WHERE TZABBREV = TZNAME), в которых вы можете использовать сокращение без получения ошибки ORA-01882: timezone region not found.

0 голосов
/ 07 сентября 2018

Да, это будет учитывать DST.

Чтобы убедиться в этом, замените date '2018-02-01' на имя столбца enteredondtm в своей формуле и посмотрите, что вы получите (хотя для TO_CHAR используйте полноформатную модель, чтобы увидеть время суток, а не только Дата). Вы увидите, что выходной - 16:00 часов предыдущего дня. Затем измените его на date '2018-08-01', и вы увидите, что результат предыдущего дня - 17:00.

У литерала даты date есть полночь как время суток. В стандартное время тихоокеанский часовой пояс на восемь часов отстает от UTC; во время летнего времени отстает на семь часов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...