2015-12-17 19 views
7

Come aggiungere giorni nel tempo nell'epoca in PythonPython aggiungere giorni nel tempo nell'epoca

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

sopra comando darmi il tempo epoca voglio aggiungere 90 giorni in quel tempo. come posso aggiungere giorni in epoch time?

risposta

10

datetime rende facile tra fromtimestamp, timedelta e timestamp:

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

su Python 3.2 e versioni precedenti, datetime oggetti non hanno un metodo .timestamp(), quindi è necessario modificare l'ultima riga al meno efficiente due conversione -Stage:

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

La conversione a due stadi richiede ~ 10 volte più lungo di .timestamp() sulla mia macchina, prendendo ~ 2.5 ms, contro 270 ~ ns per .timestamp(); certamente ancora banale se non lo fai molto, ma se hai bisogno di farlo molto, consideralo un altro argomento per usare Python moderno. :-)

+0

my python 2.6 non ha la funzione '>>> print (new.timestamp())' ottenendo errore 'AttributeError: 'datetime.datetime' l'oggetto non ha attributo 'timestamp'' – Satish

+0

@Satish: Pre-3.3, puoi mettere insieme '.timestamp()' usando 'time.mktime (x.timetuple())'. È più brutto (e devi "importare tempo"), ma è equivalente. Nota, potresti, a seconda dell'origine del timestamp e se sta usando UTC o ora locale, vuoi usare 'utcfromtimestamp' e' utctimetuple' invece delle funzioni non UTC fornite. – ShadowRanger

+0

Side-note: 2.6? Veramente? 2.7 è uscito da oltre cinque anni! – ShadowRanger

2

Se l'ingresso è POSIX timestamp poi per ottenere +90 giorni:

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

Se si vuole lavorare con gli oggetti datetime quindi utilizzare UTC fuso orario:

from datetime import datetime, timedelta 

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

Non utilizzare l'ora locale per l'aritmetica data/ora (evitare l'ingenuo fromtimestamp(), mktime(), naive_dt.timestamp() se si può aiutare). Per capire quando può fallire, leggi Find if 24 hrs have passed between datetimes - Python.