Python 日期时间库在向日期时间添加天数时可识别夏令时

Jam*_*son 7 python datetime

有没有一个 python 日期时间库可以做到这一点?

dt = iso8601.parse_date("2016-03-13 00:00:00-08")
dt = dt.astimezone(us_pacific)
dt += timedelta(days=1)
self.assertEqual(dt, iso8601.parse_date("2016-03-14 00:00:00-07"))
Run Code Online (Sandbox Code Playgroud)

换句话说,我正在寻找一个库,其中 datetime 对象足够智能,可以知道 timedelta(days=1) 与 timedelta(hours=24) 不同(支持月份的奖励积分)。

目前,我发现错误风险最小的解决方法是使用日期,然后将其转换为日期时间,并将给定时区的时间设置为 0。但问题是,很容易假设上面的代码将按给定的方式工作,所以我想使用一个不存在风险的库。同样,如果给定一个日期时间对象,则将其转换回日期会很麻烦。

编辑:

这个问题被搁置了,因为询问是否有一个软件库可以完成一项任务,而不是必须从头开始编写代码,这是题外话。我不知道如何更好地表达,因为我已经解释过解决方法是使用日期,然后添加时间,这可以通过多种方式完成。我正在寻找一种更好的方法,我已经知道它不是 python 标准库的一部分。我很确定会问“有没有更好的方法来做到这一点?”,或者“我怎样才能在大约相同数量的代码行中完成这个任务?” 也是完全有效的问题。

如果没有图书馆做这样的事情,我当然可以做到。我将其称为 YADateTime,因为它将是另一个 python 日期时间库。也就是说,如果已经有一个库,那么我就没有必要再创建一个。

小智 3

这对我在 Python 3.6.4 上有用。根据时区感知的日期时间对象正确添加日期(即日期递增且小时保持为 0)。我遇到的问题是时区偏移不正确。

不漂亮,但似乎有效。

EST = pytz.timezone('US/Eastern')
DAY = dt.timedelta(days = 1)

date = date + DAY
date_with_correct_timezone = EST.localize(dt.datetime(date.year,date.month,date.day,hour,minute,0))
if date != date_with_correct_timezone:
    print(f'     corrected {date} to {date_with_correct_timezone}')
    date = date_with_correct_timezone
Run Code Online (Sandbox Code Playgroud)

示例输出:

corrected 2017-03-13 00:00:00-05:00 to 2017-03-13 00:00:00-04:00
corrected 2017-11-06 00:00:00-04:00 to 2017-11-06 00:00:00-05:00
Run Code Online (Sandbox Code Playgroud)