2010-12-03 13 views
0

解決してくれてありがとうございます。私はOracleデータベースで日付と時刻情報を設定しているシナリオを扱っています.Ibatisを使ってこの日付を抽出し、それをjava Dateオブジェクトに割り当てます。IBATIS TypeHandlerCallback EST時間をUTC時刻に変換するgetResult(ResultGetterゲッター)

DateTimezoneTypeHandlerがTypeHandlerCallbackを実装

パブリッククラス{

ます。public void setParameterを(ParameterSetterセッター、オブジェクトのパラメータ) はSQLExceptionを発生

{java.util.Date日付=(java.utilのを次のように私は私のTypeHandlerCallbackを実装しました.Date)パラメータ。 if(date == null)setter.setNull(Types.TIMESTAMP); else {Timestamp timestamp =新しいタイムスタンプ(date.getTime()); Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone( "UTC")); setter.setTimestamp(タイムスタンプ、カレンダー); }}

(ResultGetterゲッター)はSQLExceptionがスロー

@OverrideパブリックオブジェクトのgetResult {

カレンダーカレンダー= Calendar.getInstance(はTimeZone.getTimeZone( "UTC"))。

return getter.getTimestamp(calendar);

}

@OverrideパブリックオブジェクトのvalueOf(文字列S){新しいUnsupportedOperationExceptionがスロー( "DateTimezoneTypeHandler.valueOf()がサポートされていません。")。 }}

私はデータベースにESTタイムゾーンで日付を保存しているので、getterはESTタイムゾーンで日付を持っています。データベースから日付を読み取るとgetResult関数が呼び出されますが、EST日付は変換されませんUTC/GMTタイムゾーンに変更します。それは日付を有する私のローカル・システム・タイムゾーン

**パブリックオブジェクトのgetResult(ResultGetterゲッター)のSQLExceptionをスローするESTのタイムゾーンを持つ日付に変換される{

カレンダーカレンダー= Calendar.getInstance(はTimeZone.getTimeZone( "UTC")) ;

return getter.getTimestamp(calendar);

} **

後、私のSQLマッピングです:

私はこのメソッドの実装と、なぜその必要はない機能で問題が何であるかを理解していないのです。

誰にもこの問題に関する提案/解決策がある場合は、教えてください。私は本当にそれを感謝します。

+0

*「ソリューションをありがとうございますが、私にとってはうまくいかない」*はコンテキストから少し外れています... – RedFilter

答えて

0

問題は、実際に時間を翻訳していないように見えます。タイムゾーンを設定しても、Calendarは現在の値を新しいタイムゾーンに変換しません。次に、タイムゾーン変換GMT-5(別名EST)からUTCを実行するコード例を示します。私はCalendar.addを使用し、Calendar.rollを使用しないことに注意してください。


    public static void main(String[] args) 
    { 
     Calendar calendar = Calendar.getInstance(); 
     Date date; 
     int rawOffset; 
     SimpleDateFormat simpleDateFormat = new SimpleDateFormat("M/d hh:mm;ss a"); 
     TimeZone timeZone; 

     date = calendar.getTime(); 
     System.out.println(simpleDateFormat.format(date)); 

     timeZone = TimeZone.getTimeZone("GMT-5"); 
     rawOffset = timeZone.getRawOffset(); 
     System.out.println(rawOffset); 
     calendar.add(Calendar.MILLISECOND, rawOffset); 

     date = calendar.getTime(); 
     System.out.println(simpleDateFormat.format(date)); 
    } 
0

FWIWは、データベースにOracleタイムゾーンとして日付と時刻を格納することを停止しました。外部構成への依存度が高すぎます。 currentTimeMillisを求めることabsolute point in timeを返し

  1. ので、我々はmillis-を読んでいるので、データベース
  2. でNUMBER列に日付/時刻を格納するJava DateクラスのためのTypeHandlerを作成します。その代わり、私たちは、次の操作を行いますfrom-epochは人間にとっては難しいので、データベースに2つの関数を追加してmillisから/に変換し、管理者はクエリを書くことができます。

この利点は、 JVMの外部の何かによるリアルタイムの処理。これは、外国人のブラウザで日付を入力し、それをサーバーアプリケーションに渡してデータベースに渡すときに特に便利です。

日付をデータベースに保存したい場合(時にはこれらのことを行う必要があります)、私は個人的にはJoda-Timeをおすすめします。日付、時刻、グレゴリアンのカレンダーなどを簡単に処理できます。

関連する問題