Slide 1

Slide 1 text

VOUS AVEZ L’HEURE ? Joachim Jablon - Paris.py 7 Septembre 2015 (±10%) 1

Slide 2

Slide 2 text

QUI SUIS-JE ? 2 @Ewjoachim github.com/ewjoachim ⚠ amateur de blagues pourries

Slide 3

Slide 3 text

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.

Slide 4

Slide 4 text

FUSEAUX HORREUR • Katmandou • Brasilia • Crimée, Gaza • Australie 4

Slide 5

Slide 5 text

THIS IS MADNESS 5 This is Australiaaaaaaaaa !

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

LES OUTILS DE PYTHON • datetime :
 datetime, date, time, timedelta, tzinfo • time • calendar 7

Slide 8

Slide 8 text

DATETIME • Naïf par défaut • Pas d’implémentation de fuseaux horaires 8

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

PYTZ ET TZ DATA 10 TZ Data Arthur David Olson Paul Eggert Pytz Stuart Bishop

Slide 11

Slide 11 text

PYTZ.LOCALIZE & DATETIME.ASTIMEZONE >>> ep = pytz.timezone("Europe/Paris") >>> ep.localize(datetime(2015, 10, 17)) datetime.datetime(2015, 10, 17, 0, 0, tzinfo=) >>> ep.localize(datetime(2015, 11, 17)) datetime.datetime(2015, 11, 17, 0, 0, tzinfo=) >>> ep.localize(datetime(2015, 11, 17)).astimezone( pytz.timezone("Asia/Katmandu")) datetime.datetime(2015, 11, 17, 4, 45, tzinfo=) 11

Slide 12

Slide 12 text

LES ÉPAULES DES GÉANTS • dateutil • Arrow • DeLorean 12

Slide 13

Slide 13 text

ATTENTION • ISO 8601 : la bonne idée ? 2015-09-16 20:32:45+01:00 13

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

JAVASCRIPT ? 16