2009-02-25 71 views
6

在oracle中,是否始终存储指定的时区?Oracle TIMESTAMP WITH TIMEZONE命名区域与偏移量

我一直在我们的系统中测试此列,并在一些地方的时间戳显示为:

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); 
8

这是很容易测试

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 

它存储了什么你告诉它。如果你告诉它一个偏移量,那个偏移量可能对一个或多个时区有好处,那么它为什么只选一个呢?

+0

OK,凉爽,这是我所期待的。 所以说我有一个“创建”列,我想有一个当前时间戳的默认值。 当前在我的数据库中,对systimestamp的调用返回一个带有偏移量的时间戳。我如何改变它以使用命名的时区? 谢谢 – tobyc 2009-02-26 00:18:16

相关问题