2013-01-04 11 views
5

Środkowoeuropejski czas letni rozpoczyna się w ostatnią niedzielę marca. Ustawiamy nasze zegary od 02:00 do 03:00. Co się stanie, jeśli wykonam obliczenia znacznika czasowego w żądaniu bazy danych - powiedzmy o 01:59?Obliczanie znacznika czasu z czasem letnim

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

Czy otrzymam 03:00 jako wynik lub 02:00?

A co powiesz na to, czy ustawimy nasze zegary od 03:00 do 02:00?

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

Po zmienił czas od 03:00 do 02:00 ... co się dzieje z (CURRENT_TIMESTAMP - INTERVAL '1' MINUTE) na 02:00? Czy to 02:59 czy 01:59?

Jak należy to załatwić? Najlepsza praktyka i sposób jej obsługi (w moim konkretnym przypadku) przez Oracle Database 11g Release 11.2.0.2.0?

Odpowiedz

3

Jeśli dobrze rozumiem ich dokumentację, zależy to od konfiguracji tabeli/kolumn w bazie danych. Jeśli kolumny są skonfigurowane do użycia Z STREFĄ CZASOWĄ, to Oracle automatycznie określi prawidłowe/istotne wartości. W powyższym przykładzie, jeśli kolumna ma wartość aliveuntil, to jeśli spróbujesz dodać 1 minutę o 1:59, czas zostanie zaktualizowany do 3:00.

Oto pomocny artykuł znalazłem na ten temat:

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

Przewiń w dół do dolnej części artykułu i trzeba zobaczyć, co szukasz.

Tu była sekcja artykułu znalazłem istotne:

Na przykład, we wschodnim regionie Stanów Zjednoczonych, po raz zmiany od 01:59:59 am do 3:00:00 kiedy włącza się czas letni . Przerwa między godziną 02:00:00 a 02:59:59 nie istnieje . Wartości w tym przedziale są nieprawidłowe.

Powiązane problemy