Sottrai Datetime in Python

Rayven Esplanada 30 marzo 2021
Sottrai Datetime in Python

Questo tutorial introdurrà come eseguire la sottrazione datetime in Python.

Esploreremo diversi output dopo la sottrazione, come l’output del numero di secondi, minuti, ore o anni della differenza dei due oggetti datetime forniti.

Usa il modulo datetime per sottrarre Datetime in Python

datetime è un modulo in Python che supporterà funzioni che manipolano l’oggetto datetime.

L’inizializzazione di un oggetto datetime richiede tre parametri obbligatori come datetime.datetime(year, month, day). Accetta anche parametri opzionali sotto forma di ore, minuti, secondi, microsecondi e fuso orario.

datetime ha anche la funzione now(), che inizializza la data e l’ora correnti nell’oggetto.

La sottrazione di due oggetti datetime restituirà la differenza del numero di giorni e la differenza di tempo, se presente.

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)

Produzione:

12055 days, 5:10:00

Il risultato significa che le due date sono 12055 giorni e 5 ore e 10 minuti di distanza.

Per convertire questo risultato in diversi formati, dovremmo prima convertire il timedelta in secondi. L’oggetto datetime ha un metodo incorporato datetime.total_seconds() che converte l’oggetto nel totale dei secondi che contiene.

Ecco il codice sorgente completo per la sottrazione datetime utilizzando il modulo datetime e le sue funzioni.

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 prima cosa che fa il codice è inizializzare 2 date separate per la sottrazione e chiamare la funzione più volte con output diversi ogni volta. Nel caso di all, restituirà un output che ottiene la differenza in base a tutti i casi da anni a secondi.

La funzione divmod() accetta due numeri come dividendo e divisore e restituisce una tupla del quoziente e il resto tra di loro. È necessario solo il quoziente, ed è per questo che nel codice viene utilizzato solo l’indice 0.

Produzione:

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

Ora abbiamo la differenza tra due oggetti datetime in diversi intervalli di tempo diversi.

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

Articolo correlato - Python DateTime