Vous êtes ici : Accueil Tutoriels Dates

Dates

Une petit point sur la manière de traiter les dates avec Python. Niveau débutant.

Pour gérer les notions temporelles, Python dispose d'un module nommé datetime.

>>> import datetime as datetime_module
>>> dir(datetime_module)
['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__name__', '__package__', 'date', 'datetime', 'datetime_CAPI', 'time', 'timedelta', 'timezone', 'tzinfo']

Ce module dispose de plusieurs notions :

  • date : date calendaire (18 mars 2013, par exemple) ;
  • datetime : date instantannée (18 mars 2013 à 17 heures 36 minutes, 26 secondes et 123456 micro secondes) ;
  • time : moment de la journée (17 heures 36 minutes, 26 secondes et 123456 micro secondes) ;
  • timedelta : différence entre deux dates ou instants.

La différence de deux objets temporels (date, datetime ou time) donne un timedelta. Cet objet exprime une différence en jours, secondes et microsecondes. Chaque objet temporel dispose d'une résolution (plus petite différence entre deux valeurs) :

>>> from datetime import date, datetime, time, timedelta
>>> datetime.resolution
datetime.timedelta(0, 0, 1) # une micro seconde
>>> date.resolution
datetime.timedelta(1) # un jour
>>> time.resolution
datetime.timedelta(0, 0, 1) # une micro seconde

Les objets temporels se construisent en passant des arguments les représentant (lesquels peuvent être positionnels ou nommés ce qui autorise de les passer dans le désordre) :

>>> from datetime import date, datetime, time, timedelta
>>> date(day=18, month = 3, year=2013)
datetime.date(2013, 3, 18)
>>> datetime(day=18, month = 3, year=2013, hour=8, second=42, minute=17)
datetime.datetime(2013, 3, 18, 8, 17, 42)
>>> time(hour=8, second=42, minute=17)
datetime.time(8, 17, 42)

Une méthode de classe permet d'obtenir la date du jour ou l'instant présent :

>>> from datetime import date, datetime, time, timedelta
>>> date.today()
datetime.date(2013, 3, 18)
>>> datetime.now()
datetime.datetime(2013, 3, 18, 10, 53, 46, 161260)

Enfin, pour terminer, une date peut être représentée sous une forme lisible :

>>> from datetime import date
>>> d=date.today()
>>> d.strftime('%B')
'March'

Cependant, c'est en anglais. Pour avoir une date en français, il faut configurer la locale, ce qui passe, en CPython, par ceci :

>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'fr_FR.utf-8')
'fr_FR.utf-8'
>>> d.strftime('%B')
'mars'

On peut donc maintenant passer d'un objet date à une chaîne de caractère représentant une date :

>>> d.strftime('%d %B %Y')
'18 mars 2013'

Et on peut faire l'inverse :

>>> from datetime import datetime
>>> datetime.strptime('18 mars 2013', '%d %B %Y')
datetime.datetime(2013, 3, 18, 0, 0)

Cette méthode appartient uniquement à la classe datetime.

Mots-clés associés : , ,
Spinner