Python 在纪元时间中添加天数

Python add days in epoch time

如何在 Python

中添加纪元时间
#lssec -a lastupdate -s root -f /etc/security/passwd 2>/dev/null | cut -f2 -d=
1425917335

上面的命令给我纪元时间,我想在那个时间里加上 90 天。如何在纪元时间中添加天数?

datetime 使 fromtimestamptimedeltatimestamp 之间变得容易:

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

在 Python 3.2 及更早版本中,datetime 对象没有 .timestamp() 方法,因此您必须将最后一行更改为效率较低的两阶段转换:

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

在我的机器上,两阶段转换花费的时间比 .timestamp() 长约 10 倍,约 2.5 µs,而 .timestamp() 约 270 ns;诚然,如果你做的不多,这仍然是微不足道的,但如果你需要做很多,请考虑使用现代 Python 的另一个论据。 :-)

如果输入是 POSIX 时间戳,那么要获得 +90 天:

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

如果您想使用日期时间对象,请使用 UTC 时区:

from datetime import datetime, timedelta

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

不要将本地时间用于 date/time 算法(如果可以的话,请避免天真 fromtimestamp()mktime()naive_dt.timestamp())。要了解它何时会失败,请阅读 Find if 24 hrs have passed between datetimes - Python.

你也可以dateutil.parser:

since24Hours = datetime.utcnow() - timedelta(days=1)
since24Hours=dateutil.parser.parse(str(since24Hours))
since24Hours = since24Hours.strftime('%s')
since24Hours=int(since24Hours)*1000