Как добавить дни в эпохальное время в Python

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

Приведенная выше команда дает мне время эпохи, я хочу добавить 90 дней за это время. как добавить дни в эпоху?

13
Satish 17 Дек 2015 в 05:49

3 ответа

Лучший ответ

datetime упрощает поиск между fromtimestamp, {{ X2}} и timestamp:

>>> 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()))

Двухэтапное преобразование занимает ~ 10 раз дольше, чем .timestamp() на моей машине, ~ 2,5 мкс против ~ 270 нс для .timestamp(); по общему признанию все еще тривиально, если вы не делаете это много, но если вам нужно сделать это много, рассмотрите это как еще один аргумент для использования современного Python. :-)

15
ShadowRanger 1 Мар 2017 в 15:58

Если введена метка времени POSIX, то для получения +90 дней:

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

Если вы хотите работать с объектами datetime, используйте часовой пояс UTC:

from datetime import datetime, timedelta

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

Не используйте местное время для арифметики даты / времени (избегайте наивных fromtimestamp(), mktime(), naive_dt.timestamp(), если можете помочь). Чтобы понять, когда может произойти сбой, прочитайте Узнайте, прошло ли 24 часа между датами - Python.

3
Community 23 Май 2017 в 10:31

Вы можете также dateutil.parser:

since24Hours = datetime.utcnow() - timedelta(days=1)
since24Hours=dateutil.parser.parse(str(since24Hours))
since24Hours = since24Hours.strftime('%s')
since24Hours=int(since24Hours)*1000
0
Pavneet Singh 24 Мар 2019 в 00:16