Python date et heure

De knowledge
Version datée du 24 septembre 2025 à 21:53 par Jpinon (discussion | contributions)
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Python sait tres bien gérer les dates et les heures.

Pour gérer les dates linux, unix et les autres utilisent un compteur (souvent entier) comptant les intervalles de temps (secondes, ms, µs...) depuis une date donnée. Les nombres négatifs sont les dates avant cette date et les positifs après.

Cette page décrit le codage du temps par les ordinateurs, nous n'y revenons pas.

Le module time

epoch

import time
t=time.time()
print (t)

Nous donne :

1758746873,0143945

qui est le nombre de secondes écoulées depuis le 1/1/1900 à 0:00 UTC

C'est un flottant donc sa précision est fonction de sa valeur. Elle est maximale autour de 1/1/1900 et est divisée par 10 pour chaque dizaine qui avance.

time.struct_time

On peut également traiter les dates sous forme d'objet :

t1=time.gmtime()
print (t1)
t2=time.localtime()
print (t2)

nous donne (aujourd'hui ou j'écris es lignes)

time.struct_time(tm_year=2025, tm_mon=9, tm_mday=24, tm_hour=21, tm_min=12, tm_sec=4, tm_wday=2, tm_yday=267, tm_isdst=0)
time.struct_time(tm_year=2025, tm_mon=9, tm_mday=24, tm_hour=23, tm_min=12, tm_sec=5, tm_wday=2, tm_yday=267, tm_isdst=1)

c'est plus facile pour les afficher ou les créer mais pour faire des opérations arithmétiques (ajouter un jour, retirer une semaine.... c'est complexe) Pour faire ce genre de calculs on dispose de fonctions de conversions.

import time
ts=time.time()
td=time.localtime(ts)
tsbis=time.mktime(td)

print (ts)
print (td)
print (tsbis)

Imprime

1758749090.0256174
time.struct_time(tm_year=2025, tm_mon=9, tm_mday=24, tm_hour=23, tm_min=24, tm_sec=50, tm_wday=2, tm_yday=267, tm_isdst=1)
1758749090.0

On est revenu a une précision a la seconde. C'est normal time.struc_time ne stocke pas les valeurs au delà. On perd les fractions de secondes à td=time.localtime(ts).

Calculs de date

Si par exemple on voulait savoir la date du jours 2 semaine avant une date.

import time

VT2=time.struct_time((1980,5,10,20,00,0,0,0,0)) # La date de départ
td=time.mktime(VT2)
td=td-86400*7*2                                 # nombre de secondes entre deux semaines
VT1=time.localtime(td)

print (VT1)
print (VT2)

nous donne les deux dates:

time.struct_time(tm_year=1980, tm_mon=4, tm_mday=26, tm_hour=21, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=117, tm_isdst=1)
time.struct_time(tm_year=1980, tm_mon=5, tm_mday=10, tm_hour=20, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=0, tm_isdst=0)

Tiens pourquoi est-ce qu'une date à 20h moins le nombre de secondes correspondant a deux semaines ça fait une date à 21h? Est-ce un bug?

Non! Nous sommes en France et le changement d'heure s'est produit. Le dimanche 29 mars 1981 on est passé de 1:59:59 à 3:00:00!

Ca nous montre qu'on devrait TOUJOURS travailler avec des heures UTC (avant on disait GMT).

Formater les dates

Une page est réservée à cela Format de dates.