У меня есть запрос, который выполняет некоторые преобразования часового пояса. В качестве примера, я хочу, чтобы преобразовать из EST
времени GMT
:Oracle - Как правильно * конвертировать из EST/EDT в GMT?
За время EDT из 3/13/2016 @2:00 AM
(сразу после EST-> EDT переключающий) я должен получить время по Гринвичу 3/13/2016 7:00:00 AM
(verified here на дату-/13/2016 @ 2am). Вместо этого я получаю 3/13/2016 6:00:00 AM
использовать этот запрос:
SELECT NEW_TIME(TO_DATE('2016/3/13 02:00:00 AM',
'YYYY/MM/DD HH:MI:SS AM'),'EDT','GMT')
FROM DUAL;
За время EST из 3/13/2016 @1:00AM
(за одну секунду до перехода) я получаю то, что, как представляется, правильный результат:
SELECT NEW_TIME(TO_DATE('2016/3/13 01:59:59 AM',
'YYYY/MM/DD HH:MI:SS AM'),'EST','GMT')
FROM DUAL;
Результат:
3/13/2016 6:59:59 AM
Что я здесь делаю неправильно? Я прочитал документацию Oracle по NEW_TIME и попытался переключить EDT/EST с GMT (основанный на одном примере, который у них есть в нижней части страницы), но это дает мне еще более странные результаты.
На самом деле, я точно вижу, что здесь происходит, я не могу поверить, что мне потребовалось много времени, чтобы понять это. 2:00 утра 13/13/2016 НЕ СУЩЕСТВУЕТ в EPT! Вы бы никогда не увидели 2 часа на ваших часах в этот день! Мы просто пропустим до 3 утра ... (Человек, которому я ненавижу летнее время!) –
Вы должны использовать полный идентификатор места, 'America/New_York' –
Не похоже, что это проблема для вас здесь, но убедитесь, что что вы обновляетесь в патчах часовых поясов базы данных, если работаете с данными часового пояса, особенно если у вас есть данные из часовых поясов по всему миру, а не только несколько часовых поясов США. Многие производственные базы данных не обновляются со всеми морщинами о таких вещах, как, когда DST начинается в разных местах. –