
Questo articolo descrive come utilizzare tra Unix time (Epoch time) e l’oggetto datetime, che rappresenta date e ore in Python.
- Che cos’è l’ora Unix (Epoch time, Posix time)?
- Convertire Unix time (Epoch time) in datetime:
fromtimestamp()
- Converti datetime in Unix time (Epoch time):
timestamp()
L’ora Unix (nota anche come Epoch time, Posix time) è il numero di secondi trascorsi dall’epoca Unix, 00:00:00 UTC (Coordinated Universal Time) il 1 gennaio 1970.
L’ora Unix viene utilizzata anche per rappresentare i timestamp dei file (date di creazione e modifica). Per ulteriori informazioni, vedere il seguente articolo.
Che cos’è l’ora Unix (Epoch time, Posix time)?
L’ora Unix è il numero di secondi trascorsi dall’epoca di Unix, 00:00:00 UTC (Coordinated Universal Time) del 1 gennaio 1970. È anche noto come Epoch time, Posix time, ecc.
L’ora Unix (nota anche come Epoch time, Posix time, dall’Epoch o UNIX Epoch time) è un sistema per descrivere un punto nel tempo. È il numero di secondi trascorsi dall’epoca di Unix, esclusi i secondi intercalari. L’epoca di Unix è alle 00:00:00 UTC del 1 gennaio 1970 (una data arbitraria).
Tempo Unix – Wikipedia
Convertire Unix time (Epoch time) in datetime:fromtimestamp()
Per manipolare date e orari in Python, puoi usare il modulo datetime.
Usa datetime.fromtimestamp() del modulo datetime per l’ora Unix (Epoch time) in un oggetto datetime. Specifica l’ora Unix come argomento.
Per impostazione predefinita, viene convertito nella data e nell’ora locali. Ad esempio, se si esegue il programma su una macchina con l’ambiente Japan Standard Time (JST), viene presa in considerazione la differenza di orario (+9 ore).
Se viene specificato 0 come argomento:
import datetime
dt = datetime.datetime.fromtimestamp(0)
print(dt)
# 1970-01-01 09:00:00
print(type(dt))
# <class 'datetime.datetime'>
print(dt.tzinfo)
# None
Per impostazione predefinita, vengono restituiti oggetti datetime ingenui con l’attributo tzinfo impostato su Nessuno.
Se si specifica un fuso orario per il secondo argomento tz, viene impostato l’attributo tzinfo e viene restituito un oggetto datetime consapevole con la data e l’ora correttamente convertite in quel fuso orario.
dt_utc_aware = datetime.datetime.fromtimestamp(0, datetime.timezone.utc)
print(dt_utc_aware)
# 1970-01-01 00:00:00+00:00
print(dt_utc_aware.tzinfo)
# UTC
dt_jst_aware = datetime.datetime.fromtimestamp(0, datetime.timezone(datetime.timedelta(hours=9)))
print(dt_jst_aware)
# 1970-01-01 09:00:00+09:00
print(dt_jst_aware.tzinfo)
# UTC+09:00
Viene fornito anche datetime.utcfromtimestamp() che aggiunge un oggetto datetime ingenuo in UTC (= l’attributo tzinfo è None).
dt_utc_naive = datetime.datetime.utcfromtimestamp(0)
print(dt_utc_naive)
# 1970-01-01 00:00:00
print(dt_utc_naive.tzinfo)
# None
Converti datetime in Unix time (Epoch time):timestamp()
Usa il metodo timestamp() per un oggetto datetime in Unix time (Epoch time). L’ora Unix viene restituita come numero a virgola mobile float.
Utilizzare l’oggetto datetime creato dal codice di esempio sopra come esempio.
print(dt)
# 1970-01-01 09:00:00
print(dt.timestamp())
# 0.0
print(type(dt.timestamp()))
# <class 'float'>
Gli oggetti ingenui con l’attributo tzinfo impostato su Nessuno vengono convertiti in base al fuso orario dell’ambiente in esecuzione e gli oggetti consapevoli con l’attributo tzinfo vengono convertiti in base al loro fuso orario.
Si noti che l’oggetto creato da utcfromtimestamp() è ingenuo in UTC (l’attributo tzinfo è None), quindi il risultato è diverso dagli altri oggetti.
print(dt_utc_aware)
# 1970-01-01 00:00:00+00:00
print(dt_utc_aware.timestamp())
# 0.0
print(dt_jst_aware)
# 1970-01-01 09:00:00+09:00
print(dt_jst_aware.timestamp())
# 0.0
print(dt_utc_naive)
# 1970-01-01 00:00:00
print(dt_utc_naive.timestamp())
# -32400.0
Se non è necessario prendere in considerazione il fuso orario, non è necessario preoccuparsi perché sia fromtimestamp() che timestamp() vengono convertiti in base all’ora locale della macchina.