2015-12-17 9 views
7

Wie Tage in Epoche Zeit in PythonPython hinzufügen Tage in Epoche Zeit

#lssec -a lastupdate -s root -f /etc/security/passwd 2>/dev/null | cut -f2 -d= 
1425917335 

Kommando in mir Epoche Zeit zu geben ich 90 Tage in dieser Zeit hinzufügen möchten. Wie füge ich Tage in der Epochenzeit hinzu?

Antwort

10

datetime macht es einfach, zwischen fromtimestamp, timedelta und timestamp:

>>> import datetime 
>>> orig = datetime.datetime.fromtimestamp(1425917335) 
>>> new = orig + datetime.timedelta(days=90) 
>>> print(new.timestamp()) 
1433693335.0 

auf Python 3.2 und früher datetime Objekte haben keine .timestamp() Methode, so dass Sie die letzte Zeile in die weniger effizient zwei ändern müssen -Stufe Umwandlung:

>>> import time 
>>> print(time.mktime(new.timetuple())) 

Die zweistufige Umwandlung dauert ~ 10x länger als .timestamp() auf meinem Rechner unter ~ 2,5 & mgr; s, gegen ~ 270 ns für .timestamp(); zugegebenermaßen immer noch trivial, wenn Sie nicht viel tun, aber wenn Sie es viel tun müssen, betrachten Sie es als ein weiteres Argument für die Verwendung von modernen Python. :-)

+0

Mein Python 2.6 hat keine '>>> print (new.timestamp())' -Funktion Fehler bekommen 'AttributeError: 'datetime.datetime' Objekt hat kein Attribut 'timestamp'' – Satish

+0

@Satin: Pre-3.3, Sie können '.timestamp()' mit 'time.mktime (x.tupetuple())' zusammensetzen. Es ist hässlicher (und Sie müssen Zeit importieren), aber gleichwertig. Beachten Sie, dass Sie abhängig von der Quelle des Zeitstempels und davon, ob UTC oder lokale Zeit verwendet wird, anstelle der angegebenen Nicht-UTC-Funktionen "utcfromtimestamp" und "utctimetuple" verwenden möchten. – ShadowRanger

+0

Randnotiz: 2.6? "Ja wirklich?" 2.7 ist seit über fünf Jahren draußen! – ShadowRanger

2

Wenn der Eingang POSIX-Zeitstempel ist dann 90 Tage zu erhalten:

DAY = 86400 # POSIX day (exact value) 
future_time = epoch_time + 90*DAY 

Wenn Sie mit Datetime-Objekten arbeiten wollen, dann UTC-Zeitzone verwenden:

from datetime import datetime, timedelta 

utc_time = datetime.utcfromtimestamp(epoch_time) 
future_time = utc_time + timedelta(90) 

Do not Verwenden Sie lokale Zeit für die Datum/Uhrzeit-Arithmetik (vermeiden Sie naiv fromtimestamp(), mktime(), naive_dt.timestamp(), wenn Sie es helfen können). Um zu verstehen, wenn es fehlschlägt, lesen Sie Find if 24 hrs have passed between datetimes - Python.

Verwandte Themen