Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Как перевести время из одного часового пояса в другой?  [new]
Alibek B.
Member

Откуда:
Сообщений: 3720
У меня есть записи, для которых фиксируется дата и время в столбце с типом DATE.
Дата и время заданы в часовом поясе, к примеру, "Asia/Yekaterinburg".
Мне его нужно перевести в часовой пояс, к примеру, "Europe/Moscow".
Подскажите, как это сделать?
Есть функция FROM_TZ, но она требует аргумент TIMESTAMP, а не DATE.
Можно ли преобразовать сразу дату? Или нужно ее преобразовать вначале в TIMESTAMP, затем использовать FROM_TZ?
________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
20 мар 15, 18:47    [17411605]     Ответить | Цитировать Сообщить модератору
 Re: Как перевести время из одного часового пояса в другой?  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1310
Alibek B.,

у даты нет никакого часового пояса. Можно самому прибавлять/отнимать часы, получая дату. Либо привести к типу timestamp with tz и далее преобразовать в нужный часовой пояс. Но, не зная в каком часовом поясе дата/время изначально - это гадание на кофейной гуще.
20 мар 15, 18:58    [17411628]     Ответить | Цитировать Сообщить модератору
 Re: Как перевести время из одного часового пояса в другой?  [new]
Alibek B.
Member

Откуда:
Сообщений: 3720
Часовой пояс как раз известен, он указывается в столбце связанной таблицы.
То есть мне нужно преобразовать DATE в TIMESTAMP, затем задать часовой пояс, а затем уже преобразовывать часовой пояс?
20 мар 15, 19:03    [17411648]     Ответить | Цитировать Сообщить модератору
 Re: Как перевести время из одного часового пояса в другой?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34630
Alibek B.,


http://docs.oracle.com/cd/B28359_01/olap.111/b28126/dml_functions_1088.htm#OLADM545

create or replace function convert_date_TZ(pi_date in date, pi_TZNAME_from in varchar2, pi_TZNAME_to in varchar2 ) return date
is
begin

  return cast ( from_tz(cast(pi_date as timestamp), pi_TZNAME_from) at time zone pi_TZNAME_to as date );

end;
/

-- select * from V$TIMEZONE_NAMES;

with d as
(
  select to_date( '20150223 00:00:00', 'YYYYMMDD HH24:MI:SS' ) as src from dual
)
select to_char(d.src,'YYYYMMDD HH24:MI:SS'), to_char(CONVERT_DATE_TZ( d.src, 'GMT' , 'Europe/Volgograd' ),'YYYYMMDD HH24:MI:SS') as dst from d;



TO_CHAR(D.SRC,'YYYYMMDDHH24:MI:SS') DST
----------------------------------- -----------------
20150223 00:00:00 20150223 03:00:00
20 мар 15, 19:05    [17411652]     Ответить | Цитировать Сообщить модератору
 Re: Как перевести время из одного часового пояса в другой?  [new]
Alibek B.
Member

Откуда:
Сообщений: 3720
Спасибо, оно.
В принципе, есть еще функция new_time, которая делает все что мне нужно, только проще в использовании.
Но ей нужно указывать часовой пояс не именем или смещением, а аббревиатурой.
Может быть есть похожая функция, но принимающая часовой пояс в виде наименования или смещения?
20 мар 15, 19:08    [17411661]     Ответить | Цитировать Сообщить модератору
 Re: Как перевести время из одного часового пояса в другой?  [new]
us resident
Guest
Alibek B.
есть еще функция new_time
Советую читать документацию тщательно
20 мар 15, 19:11    [17411667]     Ответить | Цитировать Сообщить модератору
 Re: Как перевести время из одного часового пояса в другой?  [new]
Alibek B.
Member

Откуда:
Сообщений: 3720
MasterZiv, спасибо, получилось.
select ...
, sessiontimezone as TZ_LOCAL
, tz_offset(PA.TZ) as TZ_REMOTE
, trunc(cast(from_tz(cast(PI.REQ_CLOCK as timestamp), sessiontimezone) at time zone PA.TZ as date), 'MM') as PERIOD
, trunc(cast(from_tz(cast(PI.REQ_CLOCK as timestamp), sessiontimezone) at time zone PA.TZ as date), 'DD') as DAY
, cast(from_tz(cast(PI.REQ_CLOCK as timestamp), sessiontimezone) at time zone PA.TZ as date) as REMOTE
, PI.REQ_CLOCK as LOCAL
...


us resident
Советую читать документацию тщательно

Можно пальцем показать?
Читал тут: http://www.techonthenet.com/oracle/functions/new_time.php
Вроде бы никаких особых дополнений не увидел.
20 мар 15, 19:17    [17411690]     Ответить | Цитировать Сообщить модератору
 Re: Как перевести время из одного часового пояса в другой?  [new]
не евразия
Guest
Alibek B.,

У тебя и так в каждой теме по десять проявлений глупости. Можно уже было удосужиться купить какие-нибудь таблетки.
Раз сказали "тщательнее", значит есть причина. Да и альтернативное коверканье документации типа "Oracle/PLSQL function" здесь не в почете.
20 мар 15, 19:28    [17411729]     Ответить | Цитировать Сообщить модератору
 Re: Как перевести время из одного часового пояса в другой?  [new]
Elic
Member

Откуда:
Сообщений: 29976
Alibek B.
Читал тут:
Дятел, что за упрямство пялится во что угодно вместо официальной документации?
21 мар 15, 08:10    [17413135]     Ответить | Цитировать Сообщить модератору
 Re: Как перевести время из одного часового пояса в другой?  [new]
кит северных морей
Member

Откуда: krsk / nyc / krsk
Сообщений: 880
Alibek B.
Вроде бы никаких особых дополнений не увидел.
таймзоны только американческие.
21 мар 15, 08:15    [17413136]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить