SQL> select dbtimezone, sessiontimezone from dual; DBTIME ------ SESSIONTIMEZONE --------------------------------------------------------------------------- +00:00 -08:00 SQL> SQL> create table timetest(tme date,tmestp timestamp(3), tmestp_tz timestamp(3) with time zone, tmpstp_tzl timestamp(3) with local time zone); Table created. SQL> SQL> insert into timetest values(sysdate,sysdate,sysdate,sysdate); row created. SQL> select * from timetest; TME --------- TMESTP --------------------------------------------------------------------------- TMESTP_TZ --------------------------------------------------------------------------- TMPSTP_TZL --------------------------------------------------------------------------- 11-Nov-12 11-NOV-12 11.56.27.000 PM 11-NOV-12 11.56.27.000 PM -08:00 11-NOV-12 11.56.27.000 PM
對比10
SQL> select dbtimezone, sessiontimezone from dual; DBTIME ------ SESSIONTIMEZONE --------------------------------------------------------------------------- +00:00 -08:00 SQL> SQL> create table timetest(tme date,tmestp timestamp(3), tmestp_tz timestamp(3) with time zone, tmpstp_tzl timestamp(3) with local time zone); Table created. SQL> SQL> insert into timetest values(sysdate,sysdate,sysdate,sysdate); row created. SQL> select * from timetest; TME --------- TMESTP --------------------------------------------------------------------------- TMESTP_TZ --------------------------------------------------------------------------- TMPSTP_TZL --------------------------------------------------------------------------- 11-Nov-12 11-NOV-12 11.56.27.000 PM 11-NOV-12 11.56.27.000 PM -08:00 11-NOV-12 11.56.27.000 PM
從此處可以看到:
timestamp with time zone 表達的是 針對 標准時區(格林尼治時間)的差。
timestamp with local time zone 表達的是 ,根據你當前所處時區,變化你和格林尼治時間的差。
如果過去相對標准時區 -8 ,那么移動到+10 時區的時候,需要加:10-(-8)=18 ,
就是 夜里11點56分+18小時 -->夜11點+1點+17小時+56分,-->凌晨過17小時+56分 -->凌晨+12小時+5小時+56分,
就是下午5小時56分。
那么,在跨越多時區的系統里,timestamp with timezone 或者 timestamp with local timezone就比較重要了。
結束