Come calcolare la differenza di tempo in Python

Quando si lavora con date e orari in Python, è spesso necessario calcolare la differenza di orario. In questo tutorial imparerai come calcolare la differenza tra due timestamp in ore, minuti e secondi.

Alla fine di questo tutorial, avrai imparato:

  • come utilizzare il modulo datetime di Python per lavorare con date e ora,
  • cosa sono gli oggetti timedelta e come sono utili e
  • calcolare la differenza di orario tra due timestamp qualsiasi, in ore, minuti e secondi.

Iniziamo.

Come usare il modulo datetime di Python

Per lavorare con date e orari in Python, utilizzerai il modulo datetime. Il modulo datetime fa parte della libreria standard di Python. Quindi puoi procedere e importarlo subito nel tuo ambiente di lavoro, in questo modo:

import datetime

Per calcolare la differenza di orario, è necessario creare due diversi timestamp. Puoi scegliere di creare:

  • due oggetti data,
  • due oggetti temporali, o
  • una combinazione di oggetti data e ora, data e ora.

Come creare un oggetto data in Python

Importiamo la classe date dal modulo datetime. Per creare un oggetto data in Python, puoi usare la sintassi generale datetime.date(,,). Ecco un esempio di creazione di un oggetto data date1:

from datetime import date
date1 = datetime.date(2022,3,27)
print(date1)

# Output: 2022-03-27

Puoi provare il codice sul compilatore Python winadmin.it per testare. Oppure installa Python sul tuo computer.

Come mostrato sopra, quando stampi la data, viene formattata nel formato AAAA-MM-GG per le date.

Nota: assicurati di specificare il mese come numero intero senza zeri iniziali. È probabile che tu sia abituato ad aggiungere uno zero iniziale al mese quando scrivi le date.

Ad esempio, per specificare una data di giugno, il 6° mese dell’anno: utilizzare 6 e non 06.

Ad esempio, prova a eseguire il seguente frammento di codice, in cui il mese è stato menzionato come 03 anziché solo 3. Vedrai che genera un errore di sintassi come mostrato:

date1 = datetime.date(2022,03,27)

print(date1)

# Error Message
File "<ipython-input-12-6eb72084e6ce>", line 1
    date1 = datetime.date(2022,03,27)
                                ^
SyntaxError: invalid token

Vediamo ora come creare un oggetto time in Python.

Come creare un oggetto tempo in Python

Per creare un oggetto time, importiamo la classe time. Qualsiasi oggetto tempo Python può essere creato utilizzando la classe time specificando i seguenti attributi di classe: ora, minuto, secondo e microsecondo.

Tuttavia, tutti questi attributi sono facoltativi. Se non specifichi un determinato attributo, diciamo, secondo, è impostato su 0 per impostazione predefinita.

Il frammento di codice seguente mostra come creare un oggetto tempo time1. Come con l’oggetto data, puoi stampare l’oggetto ora per vedere l’ora formattata.

from datetime import time
time1 = datetime.time(13,27,45,4600)
print(time1)

# Output: 13:27:45.004600

Come creare un oggetto datetime in Python

Come puoi vedere, l’oggetto data non ha informazioni sull’ora. E l’oggetto tempo non contiene informazioni sulla data.

Tuttavia, in pratica, avrai bisogno sia delle informazioni sulla data che sull’ora. Quindi si consiglia di utilizzare invece la classe datetime.

Puoi accedere alla classe datetime e creare oggetti datetime in Python, come mostrato di seguito:

dt1 = datetime.datetime(2022,3,27,13,27,45,46000)
print(dt1)

# Output: 2022-03-27 13:27:45.046000

Creiamo ora un altro oggetto datetime dt2 senza il secondo attributo. Puoi vedere che è impostato su 0, il valore predefinito.

dt2 = datetime.datetime(2022,6,30,14,28)
print(dt2)

# Output: 2022-06-30 14:28:00

Finora hai imparato come creare timestamp in Python, come date, orari e datetime. Ora è il momento di vedere come puoi calcolare la differenza tra due timestamp qualsiasi.

Vai alla sezione successiva per scoprirlo.

Come usare l’oggetto timedelta in Python

In Python, timedelta denota un intervallo di tempo. È la differenza tra due oggetti data, ora o data/ora.

Se aggiungi o sottrai due oggetti data, ora o data/ora, otterrai un oggetto timedelta. Questo oggetto timedelta ha attributi e metodi utili che possono aiutare a calcolare la differenza di orario.

Andiamo avanti e calcoliamo la differenza tra i due oggetti datetime dt1 e dt2.

dt1 = datetime.datetime(2022,3,27,13,27,45,46000) 
dt2 = datetime.datetime(2022,6,30,14,28) 
tdelta = dt2 - dt1 
print(tdelta) 
print(type(tdelta)) 

# Output 
95 days, 1:00:14.954000 
<class 'datetime.timedelta'>

Dal frammento di codice sopra, puoi vedere che la variabile tdelta contiene la differenza di tempo tra dt1 e dt2. E il tipo di tdelta è verificato per essere della classe timedelta usando il built-in di Python genere() funzione.

Ora codifichiamo un altro esempio.

Come trovare la differenza di fuso orario tra due date

Facciamo un esempio semplice ma interessante.

Problema: Per calcolare la differenza di orario tra la data corrente (oggi) e il tuo compleanno.
Per fare ciò, imposta oggi come primo timestamp e il tuo compleanno come secondo timestamp.

Come primo passo, creiamo due oggetti datetime:

  • uno per oggi, chiamiamolo oggi, e
  • un altro per il tuo compleanno, chiamiamolo compleanno

La classe datetime ha il metodo now() che ti fornisce la data e l’ora locali correnti. Quindi usiamolo per ottenere oggi, la nostra data di riferimento.

today = datetime.datetime.now()
print(today)

# Sample Output: 2022-01-22 09:10:18.489538

Nel codice seguente, sostituisci bday con il tuo compleanno per calcolare il tempo rimasto per il tuo compleanno quest’anno.

Se stai leggendo questo dopo che il tuo compleanno è passato, sentiti libero di impostare bday al tuo prossimo compleanno.

bday = datetime.datetime(2022,8,30,11,59)
print(bday)

# Sample Output: 2022-08-30 11:59:00

Il passaggio successivo consiste nel calcolare time_diff che è un oggetto timedleta, come spiegato in precedenza. Sottrae semplicemente oggi dal tuo compleanno e avrai la differenza di fuso orario.

time_diff = bday - today
print(f"Your birthday is in {time_diff}")

# Output
Your birthday is in 220 days, 2:46:00.127416

Per conoscere il numero di giorni rimanenti, utilizzare l’attributo giorni su time_diff, come mostrato:

tdays = time_diff.days
print(f"Your birthday is in {tdays} days.")

# Output
Your birthday is in 220 days.

Come trovare la differenza di tempo in secondi

Ora calcoliamo quanti secondi mancano al tuo compleanno.

Per calcolare la differenza di tempo totale in secondi, utilizzare il metodo total_seconds() sull’oggetto timedelta time_diff.

tsecs = time_diff.total_seconds()
print(f"Your birthday is {tsecs} seconds away.")

# Output
Your birthday is 19017960.127416 seconds away.

Bene, è un’attesa troppo lunga!

Detto questo, ora sai come calcolare la differenza di tempo tra due timestamp in secondi.

Rivisitiamo ora alcune nozioni di base e scriviamo quanto segue. Un giorno è composto da 24 ore, un’ora è lunga 60 minuti e 60 secondi costituiscono un minuto.

Questo è riassunto nell’immagine qui sotto:

Ore, minuti e secondi

Quindi, per convertire da secondi a minuti, ore e giorni, puoi utilizzare la tabella seguente e dividere per il fattore di conversione corrispondente.

Tabella di conversione del tempo

Nelle prossime sezioni, convertiamo la differenza di tempo in secondi in minuti e ore.

Come trovare la differenza di fuso orario in minuti

Per ottenere la differenza di tempo in minuti, devi solo dividere i secondi totali per 60.

Dividiamo tsec per 60 e memorizziamo in una variabile chiamata tmins, in questo modo:

tmins = tsecs/60
print(f"Your birthday is {tmins} minutes away.")

# Output
Your birthday is 316966.0021236 minutes away.

Come trovare la differenza di fuso orario in ore

Ora che hai calcolato la differenza di tempo in minuti, puoi dividerla per un fattore 60 per ottenere la differenza in ore. Oppure potresti dividere i secondi totali per 60*60 = 3600.

thrs = tsecs/(60*60)
print(f"Your birthday is {thrs} hours away.")

# Output
Your birthday is 5282.76670206 hours away.

Quindi ora hai imparato a calcolare la differenza di tempo in qualsiasi unità di tua scelta.

Conclusione

In questo tutorial, hai imparato a:

  • creare e lavorare con date e orari usando il modulo datetime di Python,
  • utilizzare gli oggetti timedelta per ottenere un intervallo di tempo o una differenza di tempo e
  • calcolare la differenza di tempo in secondi, minuti e ore.

Spero che questo tutorial ti sia stato utile. Ora che sai tutto sul calcolo della differenza di tempo in Python, è tempo di mettere in pratica le tue abilità.

Buon apprendimento e programmazione!

Scopri come scrivere uguale o diverso al codice o creare un gioco di serpenti in Python qui.