Django 1.4, MySQL et les dates en UTC

Ce billet date de plusieurs années, ses informations peuvent être devenues obsolètes.

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');

Avant Développement web haute résolution Après Notes sur CSS niveau 3

Tag Kemar Joint