it-swarm.com.de

Gibt Pythons time.time () den lokalen oder UTC-Zeitstempel zurück?

Gibt time.time() im Zeitmodul Python die Zeit des Systems oder die Zeit in UTC zurück?

510

Die Funktion time.time() gibt die Anzahl der Sekunden seit der Epoche als Sekunden zurück. Beachten Sie, dass die "Epoche" als Beginn des 1. Januar 1970 in UTC definiert ist. Die Epoche ist also in Bezug auf UTC definiert und schafft einen globalen Moment in der Zeit. Unabhängig davon, wo Sie sich "Sekunden nach Epoche" befinden (time.time ()), wird zum gleichen Zeitpunkt der gleiche Wert zurückgegeben.

Hier ist eine Beispielausgabe, die ich auf meinem Computer ausgeführt habe und die auch in eine Zeichenfolge konvertiert habe.

Python 2.7.3 (default, Apr 24 2012, 00:00:54) 
[GCC 4.7.0 20120414 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> ts = time.time()
>>> print ts
1355563265.81
>>> import datetime
>>> st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
>>> print st
2012-12-15 01:21:05
>>>

Die Variable ts gibt die zurückgegebene Zeit in Sekunden an. Ich habe es dann mithilfe der Bibliothek datetime in eine Zeichenfolge konvertiert, sodass es eine Zeichenfolge ist, die von Menschen gelesen werden kann.

727
squiguy

Dies ist für die Textform eines Zeitstempels, die in Ihren Textdateien verwendet werden kann. (Der Titel der Frage war in der Vergangenheit unterschiedlich, daher wurde die Einleitung zu dieser Antwort geändert, um zu verdeutlichen, wie sie als Uhrzeit interpretiert werden kann. [Aktualisiert am 14.01.2016])

Sie können den Zeitstempel als Zeichenfolge abrufen, indem Sie .now() oder .utcnow() des datetime.datetime verwenden:

>>> import datetime
>>> print datetime.datetime.utcnow()
2012-12-15 10:14:51.898000

Das now unterscheidet sich von utcnow wie erwartet - ansonsten funktionieren sie wie folgt:

>>> print datetime.datetime.now()
2012-12-15 11:15:09.205000

Sie können den Zeitstempel der Zeichenfolge explizit rendern:

>>> str(datetime.datetime.now())
'2012-12-15 11:15:24.984000'

Oder Sie können die Formatierung des Zeitstempels noch präziser gestalten:

>>> datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p")
'Saturday, 15. December 2012 11:19AM'

Wenn Sie das ISO-Format verwenden möchten, verwenden Sie die .isoformat() -Methode des Objekts:

>>> datetime.datetime.now().isoformat()
'2013-11-18T08:18:31.809000'

Sie können diese in Variablen für Berechnungen und Drucken ohne Konvertierungen verwenden.

>>> ts = datetime.datetime.now()
>>> tf = datetime.datetime.now()
>>> te = tf - ts
>>> print ts
2015-04-21 12:02:19.209915
>>> print tf
2015-04-21 12:02:30.449895
>>> print te
0:00:11.239980
285
pepr

Basierend auf der Antwort von #squiguy würde ich, um einen wahren Zeitstempel zu erhalten, Cast aus float eingeben.

>>> import time
>>> ts = int(time.time())
>>> print(ts)
1389177318

Zumindest ist das das Konzept.

125
Rudi Strydom

Die Antwort könnte keine oder beide sein.

  • keine: time.time() gibt ungefähr die Anzahl der Sekunden zurück, die seit der Epoche vergangen sind. Das Ergebnis hängt nicht von der Zeitzone ab, daher ist es weder UTC noch Ortszeit. Hier ist POSIX-Definition für "Sekunden seit der Epoche" .

  • both: time.time() erfordert keine Synchronisierung der Systemuhr, damit sie ihren Wert widerspiegelt (obwohl sie nichts mit der lokalen Zeitzone zu tun hat). Verschiedene Computer können gleichzeitig unterschiedliche Ergebnisse erzielen. Wenn Ihre Computerzeit synchronisiert ist , können Sie die UTC-Zeit leicht aus dem Zeitstempel abrufen (wenn wir Schaltsekunden ignorieren):

    from datetime import datetime
    
    utc_dt = datetime.utcfromtimestamp(timestamp)
    

Informationen zum Abrufen von Zeitstempeln aus der UTC-Zeit in verschiedenen Python-Versionen finden Sie unter Wie kann ich ein Datum gemäß UTC in Sekunden seit der Epoche konvertieren lassen?

26
jfs

Ich entschied mich schließlich für:

>>> import time
>>> time.mktime(time.gmtime())
1509467455.0
3
Natim

In einer bestimmten Zeitzone gibt es keine "Epoche". Die Epoche ist als bestimmter Zeitpunkt genau definiert. Wenn Sie also die Zeitzone ändern, ändert sich auch die Zeit selbst. Diese Zeit ist speziell Jan 1 1970 00:00:00 UTC. Also gibt time.time() die Anzahl der Sekunden seit der Epoche zurück.

2
HyperNeutrino

der Zeitstempel ist immer die Zeit in UTC. Wenn Sie jedoch datetime.datetime.fromtimestamp aufrufen, wird die Zeit in Ihrer lokalen Zeitzone zurückgegeben, die diesem Zeitstempel entspricht. Das Ergebnis hängt also von Ihrem Gebietsschema ab.

>>> import time, datetime, arrow

>>> time.time()
1564494136.0434234

>>> datetime.datetime.now()
datetime.datetime(2019, 7, 30, 16, 42, 3, 899179)
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2019, 7, 30, 16, 43, 12, 4610)

Es gibt Nice-Bibliothek arrow mit unterschiedlichem Verhalten. Im gleichen Fall wird ein Zeitobjekt mit UTC-Zeitzone zurückgegeben.

>>> arrow.now()
<Arrow [2019-07-30T16:43:27.868760+03:00]>
>>> arrow.get(time.time())
<Arrow [2019-07-30T13:43:56.565342+00:00]>