TechTalk#16 – Timezones en Django

 

TechTalks #16

Timezones en Django

 

L’une des choses les plus sensibles dans le domaine de l’informatique, c’est la gestion des horaires et dates. Malheureusement pour nous les développeurs, il y a énormément de cas particuliers dans la gestion des timezones. C’est pour cela qu’il y a des règles d’hygiène à avoir dans notre code pour ne pas commettre de grave erreurs.

Depuis 1972 est adopté l’UTC (Coordinated Universal Time), qui utilise l’horloge atomique pour déterminer la valeur de la seconde. L’UTC permet aussi de caler l’heure atomique sur l’heure solaire, ce qui donne environs une fois tous les quatre ans des minutes avec 61 secondes.

C’est en 1988 que la norme ISO 8601 est créé, son but et d’uniformiser la représentation d’une date et d’un horaire :

1977-04-22T01:00:00-0500

Cette norme est très importante, car il y a de nombreuses façons d’écrire une date et par conclusion d’occasion de se tromper !

Qu’est-ce qu’une timezone ?

Une timezone est unerégion du globe qui partage la même heure. Nous avons par exemple :

  • Paris UTC+01:00 CET (Central European time zone)
  • Beijing UTC+08:00 (China time zone)
  • San Francisco UTC-08:00 PT/PDT (Pacific time zone)

Qu’est-ce que le DST (Daylight Saving Time) ?

La mauvaise nouvelle, c’est que les timezone n’ont pas toujours la même valeur. Le DST est le passage de l’heure d’été en heure d’hiver pour faire des économies d’énergie. En France, nous sommes passés à l’heure d’été le 26 Mars 2017. L’autre mauvaise nouvelle, c’est que tout le monde ne passe pas en même temps à l’heure d’été. Par exemple à San Francisco, le changement était le 13 Mars 2017.

Ce qui veut dire que le décalage d’horaire entre deux villes n’est pas toujours le même tout au long de l’année !

Comment manipuler les datetimes en python ?

Il est fortement recommandé d’utiliser le module datetime au lieu de time. Ce dernier est utile uniquement pour la gestion des timestamp sur les system Unix. De plus, il est beaucoup moins précis et il dépend des paramètres de votre machine.

Quand vous manipuler des datetimes, il faut absolument que celle-ci soient `aware`. Cela veut dire qu’une timezone est enregistré avec votre date. Ne pas mettre de timezone vous empêchera de les comparer avec des datetimes contenant des timezones.

Pour convertir ces datetimes en données lisible par l’homme, vous pouvez utiliser le module pytz. Ce module permet aussi de convertir des datetimes entre plusieurs timezones.

Et avec Django ?

Vous pouvez importer le module timezone depuis django.utils. Ce module permet de rajouter des helpers pour gérer les datetimes naive et aware. Il vous sera aussi possible de générer un datetime avec la timezone enregistrer dans les settings de votre application Django.

Des exemples ?

Nous vous proposons detélécharger le pdf qui illustre des exemples d’utilisation des précédents modules !