2013-01-04 13 views
5

L'ora legale dell'Europa centrale ha inizio l'ultima domenica di marzo. Abbiamo impostato i nostri orologi dalle 02:00 alle 03:00. Cosa succede se faccio calcoli di timestamp in una richiesta di database - diciamo alle 01:59?Calcolo del timestamp con l'ora legale

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

faccio ad avere 03:00 come risultato o 02:00?

E che ne è dell'andare in giro se impostiamo i nostri orologi dalle 03:00 alle 02:00?

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

Dopo il tempo cambiato 3:00-02:00 ... cosa succede con il (CURRENT_TIMESTAMP - INTERVAL '1' MINUTE) alle 02:00? Sono le 02:59 o le 01:59?

Come dovrebbe essere gestito? Le migliori pratiche e come sono gestite (nel mio caso particolare) da Oracle Database 11g Release 11.2.0.2.0?

risposta

3

Se sto capendo correttamente la loro documentazione, dipende da come la tabella/le colonne sono impostate nel database. Se le colonne sono configurate per utilizzare WITH TIME ZONE, Oracle determina automaticamente i valori corretti/rilevanti. Nell'esempio sopra se la colonna aliveuntil ha questa impostazione, se si tenta di aggiungere 1 minuto a 1:59, l'ora si aggiornerà alle 3:00.

Ecco un articolo utile che ho trovato su questo argomento:

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

Scorrere fino al fondo di questo articolo e si dovrebbe vedere quello che stai cercando.

Qui era una sezione di questo articolo ho trovato rilevanti:

Per esempio, nella regione orientale degli Stati Uniti, il tempo cambia da 1:59:59-03:00:00 sono quando entra in vigore l'ora legale . L'intervallo tra 02:00:00 e 02:59:59 non esiste . I valori in quell'intervallo non sono validi.