Ich muss in 5 Minuten einen "Expires" -Wert erstellen, muss ihn jedoch im UNIX-Zeitstempelformat angeben. Ich habe das bisher, aber es scheint wie ein Hack.
def expires():
'''return a UNIX style timestamp representing 5 minutes from now'''
epoch = datetime.datetime(1970, 1, 1)
seconds_in_a_day = 60 * 60 * 24
five_minutes = datetime.timedelta(seconds=5*60)
five_minutes_from_now = datetime.datetime.now() + five_minutes
since_epoch = five_minutes_from_now - epoch
return since_epoch.days * seconds_in_a_day + since_epoch.seconds
Gibt es ein Modul oder eine Funktion, die die Zeitstempelkonvertierung für mich durchführt?
python
datetime
unix-timestamp
Daniel Rhoden
quelle
quelle
Antworten:
Ein anderer Weg ist zu verwenden
calendar.timegm
:Es ist auch portabler als
%s
Flag tostrftime
(was unter Windows nicht funktioniert).quelle
calendar.timegm(future.utctimetuple())
. Dies stellt sicher, dass eine UTC-Zeit übergeben wirdcalendar.timegm
.21600.0
Sekunden (6 Stunden) statt 0.0 für die TZcalendar.timegm(datetime.datetime.utcnow().timetuple())
. Die Verwendung der Methodedatetime.datetime.now().utctimetuple()
funktioniert bei mir nicht (Python 3.2).Jetzt können Sie in Python> = 3.3 einfach die timestamp () -Methode aufrufen , um den Zeitstempel als Float abzurufen.
quelle
datetime.now()
) ist schlecht, da es die Verwendung von naiven Datetime-Objekten fördert, die die Ortszeit darstellen, und bei DST-Übergängen (aufgrund der inhärenten Mehrdeutigkeit) möglicherweise fehlschlägt. Sie könntents = datetime.now(timezone.utc).timestamp()
stattdessen verwenden.utcnow()
. Ich bin es gewohnt, auf Computern zu arbeiten, auf denen die Zeitzone auf UTC eingestellt ist, aber das sollte in diesem Codeausschnitt nicht angenommen werden.Ich habe das gerade gefunden und es ist noch kürzer.
quelle
time.time()
kann zurückgesetzt werden. Um 5 Minuten in der Zukunft einen "Expires" -Wert zu erstellen, benötigen Sietime.monotonic()
je nach Anwendungsfall möglicherweise Analog.monotonic
verwendet werden kann, hängt von Ihrem Anwendungsfall ab, z. B. verwendet dassubprocess
Modul diesetimeout
Option , um die Option zu implementieren .Das brauchen Sie:
quelle
mktime(dt.timetuple())
.datetime.now(timezone.utc).timestamp()
bereitgestellt von @Tim Tisdall ist die Lösung in Python 3.3+. Andernfalls(dt - epoch).total_seconds()
könnte verwendet werden .Sie können verwenden
datetime.strftime
, um die Zeit in Epochenform mithilfe der%s
Formatzeichenfolge abzurufen:Hinweis: Dies funktioniert nur unter Linux und diese Methode funktioniert nicht mit Zeitzonen.
quelle
ValueError: Invalid format string
).Hier ist eine weniger kaputte
datetime
Lösung zum Konvertieren vom Datum / Uhrzeit-Objekt in den Posix-Zeitstempel:Weitere Informationen finden Sie unter Konvertieren von datetime.date in UTC-Zeitstempel in Python .
quelle
quelle
Der Schlüssel besteht darin, sicherzustellen, dass alle von Ihnen verwendeten Daten in der utc-Zeitzone liegen, bevor Sie mit der Konvertierung beginnen. Unter http://pytz.sourceforge.net/ erfahren Sie, wie Sie dies richtig machen. Durch die Normalisierung auf utc beseitigen Sie die Mehrdeutigkeit von Sommerzeitübergängen. Dann können Sie timedelta sicher verwenden, um die Entfernung von der Unix-Epoche zu berechnen und dann in Sekunden oder Millisekunden umzuwandeln.
Beachten Sie, dass sich der resultierende Unix-Zeitstempel selbst in der UTC-Zeitzone befindet. Wenn Sie den Zeitstempel in einer lokalisierten Zeitzone anzeigen möchten, müssen Sie eine weitere Konvertierung durchführen.
Beachten Sie auch, dass dies nur für Daten nach 1970 funktioniert.
quelle
1970-01-01 00:00:00+00:00
). So erhalten Sie ein naives datetime-Objekt in der lokalen Zeitzone:datetime.fromtimestamp(ts)
Das Folgende basiert auf den obigen Antworten (plus einer Korrektur für die Millisekunden) und emuliert
datetime.timestamp()
für Python 3 vor 3.3, wenn Zeitzonen verwendet werden.Um die gestellte Frage genau zu beantworten, möchten Sie:
datetime_timestamp
ist Teil von simple-date . Aber wenn Sie dieses Paket verwenden würden, würden Sie wahrscheinlich Folgendes eingeben:Hier werden viele weitere Formate / Typen für my_datetime verarbeitet.
quelle
quelle
Beachten Sie, dass Lösungen mit
timedelta.total_seconds()
Python-2.7 + funktionieren. Verwenden Siecalendar.timegm(future.utctimetuple())
für niedrigere Versionen von Python.quelle