python 日期 unix 丢失 1 天

python date unix 1 day is lost

有一天我在提取时 python 出错了。我正在转换到 unix 并提取某一天,但 3 月 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)

2018 年夏令时开始于 2018 年 3 月 11 日上午 2:00。因此这一天不是 86400 秒。

如您所见,减去 86400 秒并不是计算天数差异的好方法。一般来说,由于时区、夏令时和闰年等原因,所有 date/time "math" 运算都比简单的乘法和加法复杂一点。

更好的方法是使用库,例如​​ 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