Oracle TIMESTAMP With TIMEZONE именованный пояс против смещения
Вопрос
В oracle всегда сохраняется указанный часовой пояс?
Я тестировал этот столбец в нашей системе, и в некоторых местах временная метка отображается так:
26-FEB-09 11.36.25.390713 AM +13:00
но в других случаях это:
26-FEB-09 11.36.25.390713 AM Pacific/Auckland
Если значение сохраняется как прежнее, означает ли это, что фактический часовой пояс не сохраняется?
Я беспокоюсь, потому что, если будущая дата хранится только со смещением, мы не сможем определить фактическое время в исходном часовом поясе, потому что вы можете определить смещение по часовому поясу, но не наоборот.
Спасибо
Решение 2
Я обнаружил, что установка часового пояса и формата в ODP.NET при открытии соединения, похоже, решает эту проблему:
OracleGlobalization info = conn.GetSessionInfo();
info.TimeZone = "Pacific/Auckland";
info.TimeStampFormat = "DD-MON-YYYY HH:MI:SS.FF AM";
info.TimeStampTZFormat = "DD-MON-YYYY HH:MI:SS.FF AM TZR";
conn.SetSessionInfo(info);
Другие советы
Это довольно легко проверить
create table foo ( tswtz TIMESTAMP WITH TIME ZONE);
/
insert into foo values (TO_TIMESTAMP_TZ ('21-FEB-2009 18:00:00 -5:00', 'DD-MON-YYYY HH24:MI:SS TZH:TZM'));
insert into foo values (TO_TIMESTAMP_TZ ('21-FEB-2009 18:00:00 EST', 'DD-MON-YYYY HH24:MI:SS TZR'));
select tswtz, extract(timezone_abbr from tswtz), extract(TIMEZONE_REGION from tswtz)
from foo;
TSWTZ EXTRACT(TIMEZONE_ABBRFROMTSWTZ) EXTRACT(TIMEZONE_REGIONFROMTSWTZ)
------------- ------------------------------- ----------------------------------------------------------------
21-FEB-09 06.00.00.000000000 PM -05:00 UNK UNKNOWN
21-FEB-09 06.00.00.000000000 PM EST EST EST
2 rows selected
Он хранит то, что вы ему говорите.Если вы сообщите ему смещение, это смещение может подойти для одного или нескольких часовых поясов, так зачем ему просто выбирать один?