Ci sono due parti:
- Convertire il timestamp unix ("secondi dall'epoca") all'ora locale
- Visualizza l'ora locale nel formato desiderato.
Un modo portatile per ottenere l'ora locale che funzioni anche se in passato il fuso orario locale aveva un offset utc diverso e python non ha accesso al database tz è utilizzare un pytz
fuso orario:
#!/usr/bin/env python
from datetime import datetime
import tzlocal # $ pip install tzlocal
unix_timestamp = float("1284101485")
local_timezone = tzlocal.get_localzone() # get pytz timezone
local_time = datetime.fromtimestamp(unix_timestamp, local_timezone)
Per visualizzarlo, è possibile utilizzare qualsiasi formato orario supportato dal proprio sistema, ad esempio:
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)"))
print(local_time.strftime("%B %d %Y")) # print date in your format
Se non è necessaria l'ora locale, per ottenere invece un'ora UTC leggibile:
utc_time = datetime.utcfromtimestamp(unix_timestamp)
print(utc_time.strftime("%Y-%m-%d %H:%M:%S.%f+00:00 (UTC)"))
Se non ti interessano i problemi di fuso orario che potrebbero influire sulla data restituita o se python ha accesso al database tz sul tuo sistema:
local_time = datetime.fromtimestamp(unix_timestamp)
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f"))
Su Python 3, potresti ottenere un datetime sensibile al fuso orario usando solo stdlib (l'offset UTC potrebbe essere errato se python non ha accesso al database tz sul tuo sistema, ad esempio su Windows):
#!/usr/bin/env python3
from datetime import datetime, timezone
utc_time = datetime.fromtimestamp(unix_timestamp, timezone.utc)
local_time = utc_time.astimezone()
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)"))
Le funzioni del time
modulo sono wrapper sottili attorno all'API C corrispondente e quindi potrebbero essere meno portatili dei datetime
metodi corrispondenti , altrimenti potresti usarle anche:
#!/usr/bin/env python
import time
unix_timestamp = int("1284101485")
utc_time = time.gmtime(unix_timestamp)
local_time = time.localtime(unix_timestamp)
print(time.strftime("%Y-%m-%d %H:%M:%S", local_time))
print(time.strftime("%Y-%m-%d %H:%M:%S+00:00 (UTC)", utc_time))