2011/03/08

日付の書式とタイムゾーン (Timezone)

BI Publisher で日付型を出力する際には、タイムゾーンの注意が必要です。
今回は時刻部分をtruncした日付をテンプレートで書式設定すると、日付に誤差が生じる例を説明します。

データソースに以下のSQLを設定します。
select sysdate as col_sysdate,
       trunc(sysdate) as col_sysdate_trunc
 from dual


このデータソースから得られる実データは以下の様になります。
<DATA_DS>
<G_1>
  <COL_SYSDATE>2011-03-07T21:31:59.000+09:00</COL_SYSDATE> 
  <COL_SYSDATE_TRUNC>2011-03-07T00:00:00.000+09:00</COL_SYSDATE_TRUNC>
</G_1>
</DATA_DS>


これらのデータをテンプレート上でyyyy/MM/ddに書式設定してプレビュー表示します。



col_sysdate_truncの値が1日ずれます。



これはレポートタイムゾーンがデフォルトでUTCと認識されるために発生します。表示形式をyyyy/MM/dd  hh:mm:ssに設定した実行結果を以下に示します。実際には、タイムゾーンの時差、9時間前の値として認識されていることが確認できます。



参考URLでは「RTFテンプレートでの日付書式設定は使用しないこと」という身も蓋もない回避策と、format-dateにてタイムゾーンを設定する方法が紹介されています。format-dateの書式は以下の通りです。なお、format-dateにおけるタイムゾーンはJavaタイムゾーン書式ですが、日付書式はオラクル書式ですので注意してください。
<?format-date:HIREDATE;'yyyy-mm-dd';'Asia/Tokyo'?>

参考URL:
http://blogs.oracle.com/xmlpublisher/2009/06/how_to_keep_your_dates_from_go.html



[ Summary ]
Date value in BI Publisher is Timezone sensitive.  With format-date, you can settle the date value in certain timezone.  Note that while the timezone parameter is based on Java formula, date format parameter is based on Oracle formula.
For more details, refer the URL above.

0 件のコメント:

コメントを投稿