Ouvrir la navigation secondaire

Ce billet a plus de deux ans. S'il contient des informations techniques elles sont peut être obsolètes.

Précédent Développement web haute résolution
Suivant Notes sur CSS niveau 3 (1ère partie)

Django 1.4, MySQL et les dates en UTC

Si la terre était plate, immobile et bénéficiait d'un éclairage constant on aurait pas de problème de fuseaux horaires ;)

Mais nous avons besoin de gérer les time zones dans nos applications et ça tombe bien car c'est arrivé dans Django 1.4. Pour plus d'informations lisez la documentation et regardez la conférence d'Aymeric.

Avec Django 1.4 et le setting USE_TZ = True vos dates seront stockées en temps universel coordonné (UTC).

Si vous utilisez Postgres vous n'aurez pas de problème car le SGBD stocke les dates en UTC.

Par contre si vous utilisez MySQL il va probablement falloir convertir vos dates si ces dernières ne sont pas déjà en UTC.

Nos amis rubyistes qui savent gérer les fuseaux horaires depuis belle lurette sont déjà passés par là.

Du coup je vous oriente directement vers la documentation MySQL adéquate et vous donne un exemple de solution :

  1. Faites une sauvegarde de votre base
  2. Sans déconner, faites une sauvegarde de votre base !
  3. Vérifiez la time zone utilisée par MySQL :
    SELECT @@global.time_zone, @@session.time_zone;
  4. Si vous n'êtes pas en UTC, vous pouvez tester la fonction CONVERT_TZ :
    SELECT CONVERT_TZ(date_created,'SYSTEM','+00:00') from my_table;
  5. Si ça marche vous pouvez convertir vos dates :
    UPDATE my_table SET date_created=CONVERT_TZ(date_created,'SYSTEM','+00:00');