2009-05-22 10 views
0

oracle.sql.TIMESTAMPTZオブジェクト(TIMESTAMP WITH TIME ZONE列から選択)から直接タイムゾーン情報を抽出する方法はありますか?Oracle JDBC TIMEZONETZオブジェクトからタイムゾーンを抽出しています

理想的には、タイムゾーン情報を、オブジェクトを文字列に変換して構文解析するなど、潜在的に高価で壊れやすいフープを飛び越さずに、直接オブジェクトから取り出せるようにしたいと考えています。

あなたはこれを行う簡単な方法があると思いますが、私はまだ見つけていません。オラクルのドキュメントはあまり役に立ちません。これは、TIMESTAMPTZ#toBytes()によって返された最後の2バイトがタイムゾーン情報をエンコードしていると主張していますが、実際にこの情報をデコードするという記述はありません。

誰もがこのようなことに対処する経験がありますか?

答えて

1

Oracleには、TZD、TZH、TZMおよびTZRの特定の日付書式要素があります。

例:

SQL> create table t (col timestamp with time zone) 
    2/

Tabel is aangemaakt. 

SQL> insert into t values (sysdate) 
    2/

1 rij is aangemaakt. 

SQL> select col 
    2  , to_char(col,'TZD') time_zone_daylight_info 
    3  , to_char(col,'TZH') time_zone_hour 
    4  , to_char(col,'TZM') time_zone_minute 
    5  , to_char(col,'TZR') time_zone_region 
    6 from t 
    7/

COL        TIME_Z TIM TI TIME_ZONE_REGION 
------------------------------- ------ --- -- -------------------------------- 
22-05-09 09:12:33,000000 +02:00  +02 00 +02:00  

1 rij is geselecteerd. 

または抽出機能使用:

SQL> select col 
    2  , extract(timezone_abbr from col) time_zone_abbr 
    3  , extract(timezone_hour from col) time_zone_hour 
    4  , extract(timezone_minute from col) time_zone_minute 
    5  , extract(timezone_region from col) time_zone_region 
    6 from t 
    7/

COL        TIME_ZONE_       TIME_ZONE_HOUR      TIME_ZONE_MINUTE 
------------------------------- ---------- -------------------------------------- -------------------------------------- 
TIME_ZONE_REGION 
---------------------------------------------------------------- 
22-05-09 09:15:24,000000 +02:00 UNK            2          0 
UNKNOWN 


1 rij is geselecteerd. 

よろしく、 ロブを。

+0

ありがとうございました。 フォーマット要素や抽出機能を使用せずにこれを行う方法はないと思います(つまり、私はタイムゾーンを意識させたい既存のアプリケーションを持っています。既存のSQL文をすべて変更することなく)? – Allen

+0

私は気づいていません。この投稿は同じことを示唆しているようです:http://stackoverflow.com/questions/223096?sort=oldest。あなたはもちろん、中国の方法を適用することができます:すべての可能なタイムゾーン情報を設定し、最後の2バイトを見て... –

0

TIMESTAMPTZの形式はwell documentedです。現在、the following codeを使用してタイムゾーン情報を抽出しています。

Java SE 8の場合はgetObject(int, OffsetDateTime.class)を使用できます。getObject(int, ZonedDateTime.class)を使用する場合は、bug 25792016の影響を受ける可能性があります。