« Python date et heure » : différence entre les versions

De knowledge
Aller à la navigation Aller à la recherche
mAucun résumé des modifications
mAucun résumé des modifications
 
Ligne 1 : Ligne 1 :
Python sait tres bien gérer les dates et les heures.
Python sait tres bien gérer les dates et les heures.


== Gérer les epoch ==
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.
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|temps par les ordinateurs]], nous n'y revenons pas.
Cette page décrit le codage du [[Temps|temps par les ordinateurs]], nous n'y revenons pas.


=== Le module time ===
== Le module time ==


==== epoch ====
=== epoch ===
<syntaxhighlight lang="python3">
<syntaxhighlight lang="python3">
import time
import time
Ligne 22 : Ligne 21 :
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.
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 ====
=== time.struct_time ===
 
On peut également traiter les dates sous forme d'objet :<syntaxhighlight lang="python3">
On peut également traiter les dates sous forme d'objet :<syntaxhighlight lang="python3">
t1=time.gmtime()
t1=time.gmtime()
Ligne 50 : Ligne 50 :
</syntaxhighlight>On est revenu a une précision a la seconde. C'est normal <code>time.struc_time</code> ne stocke pas les valeurs au delà. On perd  les fractions de secondes à <code>td=time.localtime(ts)</code>.
</syntaxhighlight>On est revenu a une précision a la seconde. C'est normal <code>time.struc_time</code> ne stocke pas les valeurs au delà. On perd  les fractions de secondes à <code>td=time.localtime(ts)</code>.


=== Calculs de date ===
Si par exemple on voulait savoir la date du jours 2 semaine avant une date.<syntaxhighlight lang="python3">
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)
</syntaxhighlight>nous donne les deux dates:<syntaxhighlight lang="text">
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)
</syntaxhighlight>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).


[[Format de dates python|Format de dates]].
== Formater les dates ==
Une page est réservée à cela [[Format de dates python|Format de dates]].

Version actuelle datée du 24 septembre 2025 à 21:53

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.