Gibt time.time()
im Python-Zeitmodul die Systemzeit oder die Zeit in UTC zurück?
Die Funktion time.time()
gibt die Anzahl der Sekunden seit der Epoche in 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 legt einen globalen Zeitpunkt fest. Unabhängig davon, wo Sie sich befinden, gibt "Sekunden nach der Epoche" (time.time()) denselben Wert zum selben Zeitpunkt zurück.
Hier ist eine Beispielausgabe, die ich auf meinem Computer ausgeführt und ebenfalls in eine Zeichenkette umgewandelt 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
ist die zurückgegebene Zeit in Sekunden. Ich habe sie dann mit der datetime
-Bibliothek in eine Zeichenkette umgewandelt, die für Menschen lesbar ist.
Hier geht es um die Textform eines Zeitstempels, die in Ihren Textdateien verwendet werden kann. (Der Titel der Frage war in der Vergangenheit anders, daher wurde die Einleitung zu dieser Antwort geändert, um zu verdeutlichen, wie sie als Uhrzeit interpretiert werden kann. [aktualisiert 2016-01-14])
Sie können den Zeitstempel als String erhalten, indem Sie .now()
oder .utcnow()
der datetime.datetime
verwenden:
>>> import datetime
>>> print datetime.datetime.utcnow()
2012-12-15 10:14:51.898000
Das now
unterscheidet sich erwartungsgemäß von utcnow
- ansonsten funktionieren sie auf die gleiche Weise:
>>> print datetime.datetime.now()
2012-12-15 11:15:09.205000
Sie können den Zeitstempel explizit in den String einfügen:
>>> str(datetime.datetime.now())
'2012-12-15 11:15:24.984000'
Oder Sie können den Zeitstempel noch deutlicher formatieren, wie Sie möchten:
>>> datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p")
'Saturday, 15. December 2012 11:19AM'
Wenn Sie das ISO-Format wünschen, verwenden Sie die Methode .isoformat()
des Objekts:
>>> datetime.datetime.now().isoformat()
'2013-11-18T08:18:31.809000'
Sie können diese in Variablen für Berechnungen und zum Drucken ohne Konvertierung 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
Basierend auf der Antwort von #squiguy, um einen echten Zeitstempel zu erhalten, würde ich es von float eingeben.
>>> import time
>>> ts = int(time.time())
>>> print(ts)
1389177318
Zumindest ist das das Konzept.
Die Antwort könnte weder das eine noch das andere sein.
weder noch:
time.time()
gibt ungefähr die Anzahl der seit der Epoche verstrichenen Sekunden zurück.
Das Ergebnis hängt nicht't von der Zeitzone ab, es ist also weder UTC noch Ortszeit.
Hier's POSIX-Definition für "Seconds Since the Epoch".
beide:
time.time()
doesn't erfordern, dass die Uhr Ihres Systems's [POSIX-Definition für "Seconds Since the Epoch"]().
Verschiedene Computer können zur gleichen Zeit unterschiedliche Ergebnisse erhalten.
Andererseits, wenn Ihre Computerzeit synchronisiert ist, dann ist es einfach, die UTC-Zeit aus dem Zeitstempel zu erhalten (wenn wir die Schaltsekunden ignorieren):
aus datetime Import datetime
utc_dt = datetime.utcfromtimestamp(Zeitstempel)
Wie man Zeitstempel aus der UTC-Zeit in verschiedenen Python-Versionen erhält, erfahren Sie unter Wie kann ich ein Datum in Sekunden seit Epoche nach UTC umrechnen lassen?
So etwas wie ein "Epoche" gibt es nicht;
in einer bestimmten Zeitzone.
Die Epoche ist als ein bestimmter Moment in der Zeit gut definiert, wenn Sie also die Zeitzone ändern, ändert sich auch die Zeit selbst.
Konkret ist diese Zeit 1. Januar 1970 00:00:00 UTC
.
Also gibt time.time()
die Anzahl der Sekunden seit der Epoche zurück.
timestamp ist immer Zeit in utc, aber wenn Sie datetime.datetime.fromtimestamp
aufrufen, gibt es Ihnen die Zeit in Ihrer lokalen Zeitzone zurück, die diesem Zeitstempel entspricht, so dass die Ergebnisse von Ihrem Gebietsschema abhängen.
>>> import time, datetime
>>> 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 eine schöne Bibliothek Pfeil
mit unterschiedlichem Verhalten.
Im gleichen Fall gibt sie Ihnen ein Zeitobjekt mit UTC-Zeitzone zurück.
>>> import arrow
>>> arrow.now()
<Arrow [2019-07-30T16:43:27.868760+03:00]>
>>> arrow.get(time.time())
<Arrow [2019-07-30T13:43:56.565342+00:00]>