6

中央ヨーロッパの夏時間は、3 月の最後の日曜日に始まります。時計を 02:00 から 03:00 に設定します。データベース リクエストでタイムスタンプの計算を行うとどうなりますか? 01:59 としましょう。

UPDATE sessions SET aliveuntil = (CURRENT_TIMESTAMP + INTERVAL '1' MINUTE) WHERE id = ?

結果として 03:00 となるか、それとも 02:00 となるか?

また、時計を 03:00 から 02:00 に設定した場合はどうなるでしょうか。

SELECT id FROM sessions WHERE aliveuntil < (CURRENT_TIMESTAMP - INTERVAL '1' MINUTE)

時間が 03:00 から 02:00 に変更された後... (CURRENT_TIMESTAMP - INTERVAL '1' MINUTE)02:00 はどうなりますか? 02:59ですか、それとも01:59ですか?

これはどのように処理する必要がありますか?Oracle Database 11g Release 11.2.0.2.0 によるベスト プラクティスとその処理方法 (私の場合) は?

4

1 に答える 1

4

ドキュメントを正しく理解している場合、データベースでテーブル/列がどのように設定されているかによって異なります。列が WITH TIME ZONE を使用するように設定されている場合、Oracle は正しい/関連する値を自動的に決定します。上記の例で、列 aliveuntil にこの設定がある場合、1:59 に 1 分を追加しようとすると、時刻が 3:00 に更新されます。

この件に関して私が見つけた役立つ記事は次のとおりです。

http://docs.oracle.com/cd/B19306_01/server.102/b14225/ch4datetime.htm

記事の一番下までスクロールすると、探しているものが表示されます。

関連する記事のセクションは次のとおりです。

たとえば、米国の東部地域では、夏時間が有効になると、時刻が午前 01:59:59 から午前 3:00:00 に変わります。02:00:00 と 02:59:59 am の間の間隔は存在しません。その間隔の値は無効です。

于 2013-01-04T14:28:21.647 に答える