Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Vous avez l'heure ?

Vous avez l'heure ?

Habituel coup de gueule d'un développeur sur les fuseaux horaires, le changement d'heure etc.

Joachim Jablon

September 10, 2015
Tweet

More Decks by Joachim Jablon

Other Decks in Programming

Transcript

  1. UN PROBLÈME DE DÉFINITIONS • 1 minute = 60 secondes

    (à partir de 0")* • 1 heure = 60 minutes (à partir de 0’)** • 1 jour = 24 heures (à partir de minuit)*** • 1 semaine = 7 jours (en partant du lundi) **** • 1 mois = 30 jours = 4 semaines • 1 année = 12 mois (en partant de janvier) ***** = 365 jours ****** 3 * Sauf les minutes contenant une leap second qui peuvent en contenir 59 ou 61 ** Sauf les heures de changement d'heure qui peuvent en faire 0, ou 120 *** Sauf les jours de changement d'heure qui en font de 22 à 26 **** Sauf aux endroits où la semaine commence le dimanche ***** Sauf l'année ISO qui peut commencer à partir du 29 décembre, ****** Sauf les années bissextiles.
  2. LES BESOINS • Savoir quelle heure il est à un

    endroit • Savoir se déplacer dans le temps et l’espace • Faire fi de toutes les incongruités du calcul de l’heure 6
  3. LES OUTILS DE PYTHON • datetime :
 datetime, date, time,

    timedelta, tzinfo • time • calendar 7
  4. Python documentation « Supporting timezones at whatever level of detail

    is required is up to the application. The rules for time adjustment across the world are more political than rational, and there is no standard suitable for every application. » 9
  5. PYTZ ET TZ DATA 10 TZ Data Arthur David Olson

    Paul Eggert Pytz Stuart Bishop
  6. PYTZ.LOCALIZE & DATETIME.ASTIMEZONE >>> ep = pytz.timezone("Europe/Paris") >>> ep.localize(datetime(2015, 10,

    17)) datetime.datetime(2015, 10, 17, 0, 0, tzinfo=<DstTzInfo 'Europe/Paris' CEST+2:00:00 DST>) >>> ep.localize(datetime(2015, 11, 17)) datetime.datetime(2015, 11, 17, 0, 0, tzinfo=<DstTzInfo 'Europe/Paris' CET+1:00:00 STD>) >>> ep.localize(datetime(2015, 11, 17)).astimezone( pytz.timezone("Asia/Katmandu")) datetime.datetime(2015, 11, 17, 4, 45, tzinfo=<DstTzInfo 'Asia/ Katmandu' NPT+5:45:00 STD>) 11
  7. QUELQUES RÈGLES • Jamais de naïf ! • UTC, partout,

    tant que c'est possible • Quand on a une date, toujours savoir quelle est la timezone de référence (même si on connait le décalage UTC) • ♥ opensource 14
  8. 15 Merci Envie d'entendre plus d'histoires sur le temps ?

    Retrouvez-moi après les talks Sur le même sujet : le blog de @juldanjou http://bit.ly/paris-py-7-juldanjou Le XKCD pertinent : xkcd://1061 Retrouvez ces slides sur http://bit.ly/paris-py-7-dt