2015-12-17 13 views
7

Jak dodać dni w czasie epoki w PythoniePython dodać dni w czasie epoki

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

powyżej polecenia dając mi czas epoki Chcę dodać 90 dni w tym czasie. jak dodawać dni w czasie epoki?

Odpowiedz

10

datetime ułatwia między fromtimestamp, timedelta i timestamp:

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

W Pythonie 3.2 i wcześniejszych datetime obiekty nie mają metodę .timestamp(), więc trzeba zmienić ostatni wiersz do mniej wydajny dwa -stage konwersja:

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

konwersja dwustopniowy trwa ~ 10x dłużej niż .timestamp() na moim komputerze, przy ~ 2,5 mikrosekund, w porównaniu z 270 ~ ns dla .timestamp(); wprawdzie nadal trywialne, jeśli nie robisz tego zbyt wiele, ale jeśli musisz zrobić to dużo, rozważ to kolejny argument za używaniem nowoczesnego Pythona. :-)

+0

mój python 2.6 nie ma funkcji ">>> print (new.timestamp())' get błąd 'AttributeError: 'datetime.datetime' obiekt nie ma atrybutu 'timestamp'' – Satish

+0

@ Preat: 3.3, możesz łączyć razem '.timestamp()' używając 'time.mktime (x.timetuple())'. To brzydsze (i musisz "importować czas"), ale równoważne. Zauważ, że możesz, w zależności od źródła znacznika czasu i tego, czy używasz czasu UTC lub czasu lokalnego, chcesz użyć 'utcfromtimestamp' i' utctimetuple' zamiast podanych funkcji innych niż UTC. – ShadowRanger

+0

Notatka głosowa: 2.6? Naprawdę? 2.7 jest już od ponad pięciu lat! – ShadowRanger

2

Jeśli wejście jest POSIX datownik następnie dostać +90 dni:

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

Jeśli chcesz pracować z obiektami datetime następnie użyć Strefa czasowa: UTC

from datetime import datetime, timedelta 

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

Nie użyj czasu lokalnego dla arytmetycznej daty/czasu (unikaj naiwności fromtimestamp(), mktime(), naive_dt.timestamp(), jeśli możesz pomóc). Aby zrozumieć, kiedy może się to nie udać, przeczytaj Find if 24 hrs have passed between datetimes - Python.

Powiązane problemy