2009-03-27 12 views
5

Comme un idiot, j'ai complètement négligé le paramètre de fuseau horaire quand j'ai d'abord construit une application qui collecte des données datetime. Ce n'était pas un problème alors parce que tout ce que je faisais était des comparaisons et des commandes de style "depuis-dans-le-temps". Maintenant, j'ai besoin de faire des rapports complets qui montrent le datetime réel et bien sûr, ils sont tous stockés à America/Chicago (le ridicule par défaut de Django).Changement de fuseau horaire sur un projet Django existant

Alors oui. J'ai une base de données de taille moyenne complète de ces dates qui sont incorrectes. Je veux changer settings.TIME_ZONE à 'UTC' mais cela n'aide pas mes données existantes. Quelle est la meilleure (lire: la plus simple, la plus rapide) pour convertir toutes les données du modèle en masse?

(Toutes les données sont à l'intérieur des deux derniers mois, donc il n'y a heureusement pas l'heure d'été à convertir)

Ce projet est actuellement sur SQLite, mais j'ai un autre projet sur PostgreSQL avec un problème similaire que je pourrais vouloir Faites de même avant que DST ne démarre ... Donc, idéalement, une réponse DB-agnostique.

+0

Quelle base de données utilisez-vous, d'ailleurs? –

+0

SQLite mais c'est tout à fait possible, je vais vouloir faire la même chose sur un autre projet que j'ai utilisé Postgres pour ... Quelque chose DB-agnostique serait idéal =) – Oli

+1

SQLite stocke tout comme du texte. Certaines bases de données, cependant, stockent datetime en UTC en interne. Oracle, par exemple, traduit l'UTC dans la base de données en heure locale. Vous n'avez pas besoin de mettre à jour quoi que ce soit pour changer l'heure locale affichée. –

Répondre

3

Je voudrais effectuer une mise à jour en masse des tables de base de données en ajoutant ou en soustrayant des heures à/depuis les champs datetime.

Quelque chose comme cela fonctionne dans SQL Server, et ajoute 2 heures à la date:

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