0

DB から 10 分以上経過したレコードを無視する必要があります。ただし、DB サーバーはアプリ サーバーとは異なるタイム ゾーンに存在します。タイムスタンプ列の値からタイム ゾーンの詳細を利用しようとしましたが、その列の値にタイム ゾーンの詳細が格納されていないようです (設計が悪い?)。ただし、クエリを使用して DB インスタンスのこの情報を取得する方法を見つけました。

select dbtimezone from dual.

ただし、Java の実装のほとんどは、オフセット情報ではなく、名前を介してタイム ゾーンをサポートします。このオフセットをタイムゾーン (EST など) に正確に変換して、計算で DST 関連の時間を逃さないようにする必要があります。そのようです:

TimeZone dbZone = TimeZone.getTimeZone(10000); // offset is +10000

Calendar cal = Calendar.getInstance(dbZone);
cal.setTime(new Date());

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(dbZone);
Date parsedDate = df.parse(df.format(cal.getTime()));

計画は、現在のクライアント/アプリの時間を DB 固有のタイムゾーン時間に変換し、2 つの時間差を実行することです。

これは、いくつかの制約によりクエリでは実行できません。最新のレコードなどを取得するためのクエリを作成するように私に依頼しないでください。Java で実行する必要があります。

任意のヒント?

4

1 に答える 1

0

私はそれがあなたを正しい方向に導くかもしれないと推測しています。次のことを試して、EST からのオフセットを知り、それに応じて計算を行うことができます。

SELECT TZ_OFFSET('US/Eastern') FROM DUAL;

したがって、-3:00 が返された場合は、PST 時間であることを意味します。多分あなたはすでにこれを試しましたか?

于 2013-03-25T21:15:35.800 に答える