Wat is de gemakkelijkste manier om de huidige GMT-tijd in Unix-tijdstempelformaat te krijgen?

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.utcof +00:00verwijdert, 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

Other episodes