дата Python Unix 1 день потерян - PullRequest
       6

дата Python Unix 1 день потерян

0 голосов
/ 07 сентября 2018

У меня ошибка в python, при извлечении одного дня. Я перехожу на Unix и извлекаю один день, но 11 марта - всегда отсутствует, независимо от размера набора данных. Может кто-нибудь сказать мне, в чем может быть ошибка?

from time import localtime, mktime, strptime, strftime
day = str(20180313)
one_day = 86400
for i in range(1,5):
    print(day)
    previous_day_unix = int( mktime( strptime( day, "%Y%m%d")))-one_day
    day = strftime("%Y%m%d", localtime(int(previous_day_unix)))
    print(day)

1 Ответ

0 голосов
/ 07 сентября 2018

Переход на летнее время 2018 года начался в 2:00 утра 11 марта 2018 года. Таким образом, этот день не был 86400 секундами.

Как вы можете видеть, вычитание 86400 секунд не является хорошим способом для вычисления различий в днях. В общем, все математические операции с датой и временем немного сложнее, чем простые умножения и добавления, связанные с такими вещами, как часовые пояса, переход на летнее время и високосные годы.

Лучше использовать библиотеку, такую ​​как datetime, которая обрабатывает все эти вещи для вас:

from datetime import datetime, timedelta
day = str(20180313)
for i in range(1, 5):
    print(day)
    previous_day = (datetime.strptime(day, "%Y%m%d") - timedelta(days=1))
    day = previous_day.strftime("%Y%m%d")
#20180313
#20180312
#20180311
#20180310
...