Вы не должны рассчитывать вручную. Вы должны добавить или вычесть часовой пояс.
Oracle, как преобразовать время в UTC в местное время (информация о смещении отсутствует)
Вот пример запроса:
SELECT TO_CHAR (
FROM_TZ (CAST (SYSDATE AS TIMESTAMP), 'UTC')
AT TIME ZONE 'EUROPE/BERLIN',
'YYYY-MM-DD HH24:MI:SS TZH:TZM TZR')
AS BERLIN_Time_complete,
TO_CHAR (
FROM_TZ (CAST (SYSDATE AS TIMESTAMP), 'UTC')
AT TIME ZONE 'UTC',
'YYYY-MM-DD HH24:MI:SS TZH:TZM TZR')
AS UTC_Complete,
TO_CHAR (
FROM_TZ (CAST (SYSDATE AS TIMESTAMP), 'UTC')
AT TIME ZONE 'EUROPE/BERLIN',
'YYYY-MM-DD HH24:MI:SS TZH:TZM')
AS BERLIN_Time_complete,
TO_CHAR (
FROM_TZ (CAST (SYSDATE AS TIMESTAMP), 'UTC')
AT TIME ZONE 'EUROPE/BERLIN',
'TZH:TZM')
AS BERLIN_Timezone,
TO_CHAR (
FROM_TZ (CAST (SYSDATE AS TIMESTAMP), 'UTC')
AT TIME ZONE 'EUROPE/BERLIN',
'TZR')
AS Timezone_Name
FROM DUAL;
Ключ для формата:
- ГГГГ: год из четырех цифр (0000-9999 от: 2018)
- ММ: месяц с двумя цифрами (01-12)
- DD: день с двумя цифрами (01-31)
- ЧЧ24: час 00-23
- МИ: минуты 00-59
- SS: секунды 00-59
- TZH: часовой пояс-часы
- TZM: часовой пояс-минуты (есть часовые пояса со смещением 30 минут)
- TZR: название часового пояса
Вы должны поиграться с ними, чтобы понять to_date()
/ to_char()
. Вам это понадобится.
Если вы действительно хотите добавить часы. Вот пример:
select sysdate + INTERVAL '2' HOUR from dual;