A DATE
не имеет никакой информации о часовом поясе, поэтому, если вы хотите настроить отображаемое время, вам нужно будет указать, какой часовой пояс номинально представляет эта дата, и в какой часовой пояс вы хотите преобразовать ее в.
Например, если ваша сохраненная дата представляет собой UTC, и вы хотите увидеть эквивалентное местное время в Париже, вы можете указать, что сохраненное время указано в UTC, приведя его в качестве простой метки времени и передав ее в функция from_tz()
;а затем укажите целевой часовой пояс с помощью at
:
-- CTE for your sample data
with course (start_dte) as (
select cast(timestamp '2018-10-17 14:00:00' as date) from dual
)
-- actual query
select from_tz(cast(start_dte as timestamp), 'UTC')
at time zone 'Europe/Paris' as start_timestamp_tz
from course;
START_TIMESTAMP_TZ
------------------------------------------
2018-10-17 16:00:00.000000000 EUROPE/PARIS
Поскольку вы запрашиваете это через JDBC, вы, вероятно, захотите получить его как его собственный тип данных, а затем выбрать способотображать это локально.(Но вы, вероятно, могли бы запросить его как дату и настроить его также на Java ...)
Если вы хотите преобразовать его в строку на стороне БД, просто используйте модель формата, которую вы уже использовали:
select to_char(from_tz(cast(start_dte as timestamp), 'UTC')
at time zone 'Europe/Paris', 'DD.MM.YYYY HH24:MI') as start_date
from course;
START_DATE
----------------
17.10.2018 16:00
Также легко получить его в два поля, и если вы не хотите повторять преобразование, вы можете использовать CTE или встроенное представление:
select to_char(start_timestamp_tz, 'DD.MM.YYYY') as start_date,
to_char(start_timestamp_tz, 'HH24:MI') as start_time
from (
select from_tz(cast(start_dte as timestamp), 'UTC')
at time zone 'Europe/Paris' as start_timestamp_tz
from course
);
START_DATE START_TIME
---------- ----------
17.10.2018 16:00
НоПохоже, что Java должна делать это преобразование в строки для отображения.