2012-04-09 6 views
1

私はuserCurrentDateとオプションのリストを比較する必要があります。java日付をSQLと同じタイムゾーンのTIMESTAMPと比較してください

オプションは、時間属性(定義:TIMESTAMP(6)WITH TIME ZONE。oracle)を含むデータベース内の表です。各オプションにはタイムゾーンがあります。

userCurrentDate(定義日。in java)は、ユーザーの時刻と日付をオフセットで保持するパラメータです。ユーザーは世界中から来ることができるため、各ユーザーは異なるタイムゾーンにいます。

私は現在のユーザの日付とオプションの日付とを比較する必要があります。 だから私は同じ時間帯にこの2つのパラメータを取得する必要があります。

どのようにしてこの2つのパラメータを同じタイムゾーンで取得できますか

私はGMTでそれらを取得しようとしましたので、私はこのように、同じベースでそれらを取得することができます:

trunc(SYS_EXTRACT_UTC(o.time)) = trunc(sysdate) 

しかし、そのない良い解決策。

だから、私は同じタイムゾーンでそれらを取得する必要があります。どのように私はSQLコマンド(または他のソリューション)でそれを得ることができますか?

+1

ここに記載されているように、タイムゾーン機能があなたの望むものだと私は信じています。http://stackoverflow.com/questions/9216832/querying-oracle-timestamp-with-timezone –

+0

私はそれをチェックします。ありがとう – lolo

+1

Dateオブジェクトはタイムゾーンを処理しないことに注意してください。 01/01/70からGMTで経過したミリ秒の時間を記録します。あなたのアプリに時間ベースのロジックが必要な場合は、カレンダーを使用することができます。 – Morfic

答えて

0

私はタイムゾーンのOracle関数でこの問題を解決します。 使用:

to_timestamp_tz(to_char(CAST(FROM_TZ(CAST(sysdate AS TIMESTAMP), 'GMT') AT TIME ZONE o.time AS DATE) 

と比較してください。

0

なぜこの変換が必要だと思いますか?どのバージョンのOracleとOracle JDBCがありますか?

connection.prepareStatement("select * from options o where o.time = ?") 
    .setTimestamp(1, new Timestamp(userCurrentDate.getTime()) 
    .executeQuery(); 

私はojdbc14.jarとのOracle 10gでこれをテストしてみた、それが正常に動作します:あなたは、ちょうどこのように、あなたのuserCurrentDateを結合し、SQLを実行

てみました。

DateTimestampデータ型は、その中に任意のタイムゾーン情報を持っていないので、あなたが実際に限り、DBの値を持つタイムゾーンに一致する気にはなりません:あなたは、あなたのDBを必要としない

  1. 値は実際にはタイムゾーンです。タイプTIMESTAMP WITH TIME ZONEの列に値を挿入すると、JDBCドライバは現地時間帯を使用します。
  2. 私はDate/Timestampのタイプにはその情報が含まれていないので、の表示を Javaプログラムの元のタイムゾーンにする必要はありません。

Java DateオブジェクトをDB値に一致させるだけであれば、変換する必要はありません。

また、件名にこの包括的な記事をチェックしてください:[How To] Handle Oracle TimeStamp with TimeZone from Java

+0

私のコードでは、タイムゾーンがあります。このタイムゾーンは私のデータベースにとって重要です。 o.timeは「リスト」なので、それぞれを比較する必要がありますか? – lolo