2009-03-27 8 views
5

Come un idiota, ho completamente trascurato l'impostazione del fuso orario quando ho creato per la prima volta un'applicazione che raccoglie dati datetime.Modifica del fuso orario su un progetto Django esistente

Non era un problema quindi perché tutto quello che stavo facendo era il confronto e l'ordinamento in stile "dal tempo". Ora ho bisogno di fare rapporti completi che mostrano il datetime effettivo e, naturalmente, sono tutti archiviati in America/Chicago (il ridicolo default di Django).

Quindi sì. Ho un database di medie dimensioni pieno di queste date che non sono corretti. Voglio cambiare settings.TIME_ZONE a 'UTC' ma ciò non aiuta i miei dati esistenti.

Qual è il modo migliore (leggi: più semplice, più veloce) per convertire tutti i dati del modello in massa?

(tutti i dati sono da negli ultimi due mesi, quindi non c'è per fortuna non DST da convertire)

Questo progetto è attualmente in SQLite, ma ho un altro progetto su PostgreSQL con un problema simile che potrei voler fare lo stesso prima che la DST inizi a calciare ... Quindi idealmente una risposta agnostica al DB.

+0

cosa del database stai usando, btw? –

+0

SQLite ma è del tutto possibile Voglio fare la stessa cosa su un altro progetto che ho usato Postgres per ... Qualcosa di DB-agnostico sarebbe ideale =) – Oli

+1

SQLite memorizza tutto come testo. Alcuni database, tuttavia, memorizzano datetime in UTC internamente. Oracle, ad esempio, traduce l'UTC nel database in localtime. Non è necessario aggiornare nulla per modificare l'ora locale visualizzata. –

risposta

3

Farei un aggiornamento di massa alle tabelle del database aggiungendo o sottraendo ore ai/dai campi datetime.

Qualcosa come questo funziona in SQL Server, e aggiunge 2 ore per la data:

update tblName set date_field = dateadd("hh", 2, data_field)