Soustraire Datetime en Python

Rayven Esplanada 27 décembre 2020
Soustraire Datetime en Python

Ce tutoriel présente la façon d’effectuer la soustraction de la date et de l’heure en Python.

Nous explorerons les différentes sorties après soustraction, comme la sortie du nombre de secondes, minutes, heures ou années de la différence entre les deux objets datetime fournis.

Utiliser le module datetime pour soustraire datetime en Python

datetime est un module en Python qui supportera les fonctions qui manipulent l’objet datetime.

L’initialisation d’un objet datetime nécessite trois paramètres obligatoires comme datetime.datetime(year, month, day). Il accepte également des paramètres optionnels sous la forme d’heures, de minutes, de secondes, de microsecondes et de fuseau horaire.

L’objet datetime a également la fonction now(), qui initialise la date et l’heure actuelles dans l’objet.

En soustrayant deux objets date-heure, on obtient la différence entre le nombre de jours et la différence d’heure, s’il y en a une.

from datetime import datetime

then = datetime(1987, 12, 30, 17, 50, 14)  # yr, mo, day, hr, min, sec
now = datetime(2020, 12, 25, 23, 13, 0)

print(now - then)

Production :

12055 days, 5:10:00

Le résultat signifie que les deux dates sont distantes de 12055 jours et 5 heures et 10 minutes.

Pour convertir ce résultat en différents formats, il faudrait d’abord convertir le timedelta en secondes. L’objet date-heure a une méthode intégrée datetime.total_seconds() qui convertit l’objet en secondes totales qu’il contient.

Voici le code source complet de la soustraction datetime en utilisant le module datetime et ses fonctions.

from datetime import datetime


def getDifference(then, now=datetime.now(), interval="secs"):

    duration = now - then
    duration_in_s = duration.total_seconds()

    # Date and Time constants
    yr_ct = 365 * 24 * 60 * 60  # 31536000
    day_ct = 24 * 60 * 60  # 86400
    hour_ct = 60 * 60  # 3600
    minute_ct = 60

    def yrs():
        return divmod(duration_in_s, yr_ct)[0]

    def days():
        return divmod(duration_in_s, day_ct)[0]

    def hrs():
        return divmod(duration_in_s, hour_ct)[0]

    def mins():
        return divmod(duration_in_s, minute_ct)[0]

    def secs():
        return duration_in_s

    return {
        "yrs": int(yrs()),
        "days": int(days()),
        "hrs": int(hrs()),
        "mins": int(mins()),
        "secs": int(secs()),
    }[interval]


then = datetime(1987, 12, 30, 17, 50, 14)  # yr, mo, day, hr, min, sec
now = datetime(2020, 12, 25, 23, 13, 0)

print("The difference in seconds:", getDifference(then, now, "secs"))
print("The difference in minutes:", getDifference(then, now, "mins"))
print("The difference in hours:", getDifference(then, now, "hrs"))
print("The difference in days:", getDifference(then, now, "days"))
print("The difference in years:", getDifference(then, now, "yrs"))

La première chose que fait le code est d’initialiser 2 dates séparées pour la soustraction et d’appeler la fonction plusieurs fois avec des sorties différentes à chaque fois. Dans le cas de all, il retournera une sortie qui obtiendra la différence basée sur tous les cas, des années aux secondes.

La fonction divmod() accepte deux nombres comme dividende et diviseur et retourne un tuple du quotient et le reste entre eux. Seul le quotient est nécessaire, et c’est pourquoi seul l’indice 0 est utilisé dans le code.

Production :

The difference in seconds: 1041052966
The difference in minutes: 17350882
The difference in hours: 289181
The difference in days: 12049
The difference in years: 33

Nous avons maintenant la différence entre deux objets date-heure dans plusieurs périodes différentes.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Article connexe - Python DateTime