TD G2 : Modules time et datetime¶

1. Module time¶

On va commencer par travailler avec le module timeque l'on a va utiliser ici pour chronométrer des fonctions.

Q1. Compléter la cellule ci-dessous pour afficher la liste des fonctions de ce module.

In [ ]:
import time

# à completer

On peut voir dans la liste précédente qu'il existe une fonction time().

Q2. Faire afficher l'aide sur cette fonction et essayer de comprendre ce qu'elle fait.

In [ ]:
 

En clair, cette fonction time() renvoie le nombre de secondes depuis une date de référence (cette date s'appelle epoch, et représente en principe le 1er janvier 1970, 0h0'0"). Voici un exemple d'utilisation :

Q3. Exécuter plusieurs fois la cellule suivante et constanter les changements au cours du temps

In [ ]:
t0 = time.time()
print(t0)
print(type(t0))

Le principe pour chronométrer le temps d'exécution d'une fonction :

En mesurant l'heure avant et après l'exécution d'une fonction, on peut chronométrer la durée de son exécution :

In [ ]:
t0= # à compléter
for i in range(100000):
    a = i**2 # on effectue une opération
t1= # à compléter
print(f"Durée = {t1-t0:.4f} secondes") # :.4f signifie affiche 4 décimales

Remarquons que t1-t0 représente une durée, et que si l'on veut la convertir en minutes secondes etc., il faudra faire nos propres conversions...

Q4. Exécuter plusieurs fois la cellule précédente pour voir si le temps d'exécution est exactement le même. On devrait constater que non, cela est du au fait qu'en arrière plan, de nombreuses tâches liées au système sont exécutées et consommes elles aussi du temps. Mais pour une première estimation, cela ne posera pas de problème.

2. Module datetime¶

Voyons maintenant le module datetime qui propose beaucoup d'autres fonctionnalités (gestions des dates, des temps etc.) au travers de quelques exemples.

a. Gestion des dates¶

Q5. Compléter le code suivant pour faire afficher la liste des fonction du module datetime

In [ ]:
import datetime

# à compléter

Dans le module datetime on trouve par exemples la fonction  datetime qui permet de saisir une date (il faut bien l'écrire deux fois !). Elle renvoie un objet de type datetime.datetime (c'est pas simple tous ces mots !). Ensuite, on peut convertir l'objet précédent en chaine de caractère avec la méthode .strftime(...). Voyons cela sur un exemple en retrouvant par exemple le jour de la naissance de Kylian Mbappe:

In [ ]:
# syntaxe pour la saisie d'une date :
day0 = datetime.datetime(1998,12,20)
print("type :",type(day0))

# Conversion de l'objet date en str :
print("Kylian est né un",day0.strftime("%A"))

Q6. Pour un aperçu complet des possibilités d'affichage de la fonction strftime(...) (ici on a par exemple utilisé l'option %A) on peut par exemple consulter cette page du site W3School. Déterminer alors par exmple le numéro du jour (entre 1 et 365) de la naissance de Kylian.

In [ ]:
num_jour = # à compléter

print("Kylian est né le",num_jour,"e jour de l'année")

Q7. Si D est un objet de type datetime.datetime on peut avoir accès à l'année en tapant D.year. Récupérons alors la date d'aujourd'hui (voir sur W3school) et calculer l'âge de Kylian en effectuant la soustraction :

In [ ]:
today = # à compléter

print(f"L'âge de Kylian est de {today.year-day0.year} ans")

On peut être plus précis car python sait avec ce module faire des soustractions de dates.

In [ ]:
delta = today - day0
print(type(delta)) # on remarque que le type est différent de datetime

print("Kylian est né en ",day0.year)
print("Nous sommes en ",today.year)
print("Il a ",today.year-day0.year,"ans")
print("Plus précisément, il s'est écoulé :",delta)
print("Il est né il y a ",delta.days,"jours")

Remarque : on notera que la variable delta est d'un type timedelta et non pas datetime.

Exercice 1

Pour la fin de l'année scolaire 2025, on espère ne pas déborder en juillet. Quel sera le jour de la semaine correspondant au 30 juin ?

Q8. Quel jour est-ce ?

In [ ]:
 

Q9. Combien reste-il de jours ? Combien de semaines ?

In [ ]:
today =datetime.datetime.now()
fin = datetime.datetime(2025,6,30)

# à compléter

Exercice 2

Q10. L'algorithme suivant permet de retrouver le dernier vendredi de février. Bien comprendre cet algorithme puis le modifier pour retrouver la date du passage à l'heure d'été, sachant que ce sera le dernier dimanche de mars.

In [ ]:
print("Les vendredis de février sont :")
for i in range(1,29):
    date = datetime.datetime(2025,2,i)
    day = date.strftime('%A')
    if day == 'Friday' :
        print(f"vendredi {i} février 2025")
        sortie = i
print("Le dernier est le vendredi ",sortie,"février 2025")

b. Gestion des durées¶

Un objet de type timedeltareprésente une durée. On peut accéder au nombres de jours et aux nombres de secondes. Voyons sur un exemple ce que l'on peut faire

Voyons le temps qui nous spérare de l'ouverture de vos cadeaux de Noël

In [ ]:
christmas = datetime.datetime(2024,12,25,0,0,0)
today = datetime.datetime.now()
delta = christmas-today
print(delta)

On peut directement exprimer cette durée en jours et secondes (et c'est "malheureusment" tout. Pour le reste il faudra faire ses propres calculs !)

In [ ]:
print("Il reste ",delta.total_seconds(),"secondes")
print("Il reste ",delta.days,"jours")

Si l'on veut convertir cela en semaines, ou en heures ou en minutes on peut procéder ainsi

In [ ]:
minute = datetime.timedelta(minutes=1) # durée d'une minute
hour = datetime.timedelta(hours=1) # durée d'un heure
week = datetime.timedelta(weeks=1) # durée d'un semaine

print("en semaines ",delta/week)
print("en heures ",delta/hour)
print("en minutes ",delta/minute)

Pour finir, si l'on veut saisir une durée en heures ,minutes par exemple on peut écrire

In [ ]:
elapsetime = datetime.timedelta(hours=2,minutes=10)
print(elapsetime)

et le traduire en secondes

In [ ]:
second = datetime.timedelta(seconds=1)
print(elapsetime/second)

Exercice 3

Q11. Écrire un code qui donne :

  • le jour de la semaine de votre naissance
  • le nombre de jours qui se sont écoulés depuis votre naissance
  • le nombre de minutes qui se sont écoulées depuis votre naissance