De time
module kan worden geïnitialiseerd met seconden sinds epoch:
>>> import time
>>> t1=time.gmtime(1284286794)
>>> t1
time.struct_time(tm_year=2010, tm_mon=9, tm_mday=12, tm_hour=10, tm_min=19,
tm_sec=54, tm_wday=6, tm_yday=255, tm_isdst=0)
Is er een elegante manier om een datetime.datetime
-object op dezelfde manier te initialiseren?
Antwoord 1, autoriteit 100%
datetime.datetime.fromtimestamp
zal doen, als je de tijdzone kent, zou je dezelfde output kunnen produceren als met time.gmtime
>>> datetime.datetime.fromtimestamp(1284286794)
datetime.datetime(2010, 9, 12, 11, 19, 54)
of
>>> datetime.datetime.utcfromtimestamp(1284286794)
datetime.datetime(2010, 9, 12, 10, 19, 54)
Antwoord 2, autoriteit 10%
Seconden sinds tijdperk tot datetime
tot strftime
:
>>> ts_epoch = 1362301382
>>> ts = datetime.datetime.fromtimestamp(ts_epoch).strftime('%Y-%m-%d %H:%M:%S')
>>> ts
'2013-03-03 01:03:02'
Antwoord 3, autoriteit 7%
Uit de documenten is de aanbevolen manier om een timezone-bewust datetime-object te krijgen van seconden sinds epoch:
from datetime import datetime, timezone
datetime.fromtimestamp(timestamp, timezone.utc)
Python 2, met behulp van pytz
:
from datetime import datetime
import pytz
datetime.fromtimestamp(timestamp, pytz.utc)
Antwoord 4, autoriteit 2%
Houd er rekening mee dat datetime.datetime.fromtimestamp( timestamp) en .utcfromtimestamp(timestamp) mislukken in Windows voor datums vóór 1 januari 1970, terwijl negatieve Unix-tijdstempels lijken te werken op Unix-gebaseerde platforms. De documenten zeggen dit:
Zie ook Issue1646728
Antwoord 5
Voor degenen die willen dat het voldoet aan ISO 8601, aangezien de andere oplossingen het scheidingsteken T
noch de tijdverschuiving hebben (behalve het antwoord van Meistro):
from datetime import datetime, timezone
result = datetime.fromtimestamp(1463288494, timezone.utc).isoformat('T', 'microseconds')
print(result) # 2016-05-15T05:01:34.000000+00:00
Opmerking, ik gebruik fromtimestamp
want als ik utcfromtimestamp
zou gebruiken, zou ik hoe dan ook op .astimezone(...)
moeten ketenen om de offset.
Als je niet helemaal naar microseconds
wilt gaan, kun je een andere eenheid kiezen met de
isoformat()-methode.