Python biedt verschillende pakketten (datetime
, time
, calendar
) zoals te zien is hierom met tijd om te gaan. Ik heb een grote fout gemaakt door het volgende te gebruiken om de huidige GMT-tijd te krijgen time.mktime(datetime.datetime.utcnow().timetuple())
Wat is een eenvoudige manier om de huidige GMT-tijd in Unix-tijdstempel te krijgen?
Antwoord 1, autoriteit 100%
Ik zou time.time() gebruiken om een tijdstempel in seconden sinds het tijdperk te krijgen.
import time
time.time()
Uitvoer:
1369550494.884832
Voor de standaard CPython-implementatie op de meeste platforms levert dit een UTC-waarde op.
Antwoord 2, autoriteit 69%
import time
int(time.time())
Uitvoer:
1521462189
Antwoord 3, autoriteit 16%
Helpt dit?
from datetime import datetime
import calendar
d = datetime.utcnow()
unixtime = calendar.timegm(d.utctimetuple())
print unixtime
Hoe een Python UTC datetime-object naar UNIX-tijdstempel te converteren
Antwoord 4, autoriteit 10%
python2en python3
het is goed om de tijdmodule te gebruiken
import time
int(time.time())
1573708436
je kunt ook de datetime-module gebruiken, maar als je strftime(‘%s’) gebruikt, maar strftime converteert de tijd naar je lokale tijd!
python2
from datetime import datetime
datetime.utcnow().strftime('%s')
python3
from datetime import datetime
datetime.utcnow().timestamp()
Antwoord 5, autoriteit 8%
Of gewoon met behulp van de datetime standaardmodule
In [2]: from datetime import timezone, datetime
...: int(datetime.now(tz=timezone.utc).timestamp() * 1000)
...:
Out[2]: 1514901741720
U kunt afkappen of vermenigvuldigen, afhankelijk van de gewenste resolutie. Dit voorbeeld voert milli’s uit.
Als je een juiste Unixtijdstempel (in seconden) wilt, verwijder dan de * 1000
Antwoord 6, autoriteit 5%
Python 3 seconden met microseconde decimale resolutie:
from datetime import datetime
print(datetime.now().timestamp())
Python 3 gehele seconden:
print(int(datetime.now().timestamp()))
WAARSCHUWING op datetime.utcnow().timestamp()
!
datetime.utcnow()
is een niet-tijdzonebewust object. Zie referentie: https://docs.python.org/ 3/library/datetime.html#aware-and-naïeve-objects
Voor zoiets als 01:00 UTC:
from datetime import timezone
print(datetime(1970,1,1,1,0,tzinfo=timezone.utc).timestamp())
of
print(datetime.fromisoformat('1970-01-01T01:00:00+00:00').timestamp())
als je de tzinfo=timezone.utc
of +00:00
verwijdert, krijg je resultaten afhankelijk van je huidige lokale tijd. Bijvoorbeeld: 1 uur ‘s nachts op 1 januari 1970 in uw huidige tijdzone – wat legitiem kan zijn – als u bijvoorbeeld de tijdstempel wilt van het moment waarop u geboren bent, moet u de tijdzone gebruiken waarin u bent geboren. Echter, de tijdstempel van datetime.utcnow().timestamp()
is noch het huidige tijdstip in lokale tijd, noch UTC. Ik zit nu bijvoorbeeld in GMT-7:00 en datetime.utcnow().timestamp()
geeft een tijdstempel van 7 uur in de toekomst!
Antwoord 7, autoriteit 2%
In python3 werkt dit tenminste:
>>> datetime.strftime(datetime.utcnow(), "%s")
'1587503279'
Antwoord 8
Ik hou van deze methode:
import datetime, time
dts = datetime.datetime.utcnow()
epochtime = round(time.mktime(dts.timetuple()) + dts.microsecond/1e6)
De andere methoden die hier worden gepost, geven u ofwel niet gegarandeerd UTC op alle platforms of rapporteren alleen hele seconden. Als je volledige resolutie wilt, werkt dit, tot op de microseconde.
Antwoord 9
#First Example:
from datetime import datetime, timezone
timstamp1 =int(datetime.now(tz=timezone.utc).timestamp() * 1000)
print(timstamp1)
Uitgang: 1572878043380
#second example:
import time
timstamp2 =int(time.time())
print(timstamp2)
Uitgang: 1572878043
- Hier kunnen we zien dat het eerste voorbeeld meer accurate tijd geeft dan de tweede.
- Hier gebruik ik de eerste.
Antwoord 10
from datetime import datetime as dt
dt.utcnow().strftime("%s")
Uitgang:
1544524990