Python timedelta 跨越 DST 转换 returns 结果不正确?

Python timedelta spanning DST changeover returns incorrect result?

夏令时从 2021 年 3 月 14 日凌晨 2 点开始。

使用 Python zoneinfo 创建时区感知日期时间如下:

import zoneinfo
from datetime import datetime

tz = zoneinfo.ZoneInfo("US/Eastern")

d0 = datetime(2021, 3, 13, 23, tzinfo=tz)
d1 = datetime(2021, 3, 14, 7, tzinfo=tz)
print(d0, d1, (d1 - d0).total_seconds() / 60 / 60)

我收到输出:

2021-03-13 23:00:00-05:00 2021-03-14 07:00:00-04:00 8.0

Python 正确地 'seeing' 这些值之间的 UTC 偏移转换(-5 对 -4),但为什么生成的时间增量等于 8 而不是 7?

就其价值而言,按如下方式创建时区感知日期时间会产生完全相同的结果:

d0 = datetime(2021, 3, 13, 23).replace(tzinfo=tz)
d1 = datetime(2021, 3, 14, 7).replace(tzinfo=tz)

感谢对我的原始问题的讨论以及我从 blog post by Paul Ganssle 中获得的理解,我将我的 timedelta.total_seconds() 数学替换为:

d1.timestamp() - d0.timestamp()

这给出了我一直追求的正确 'actual' 时间跨度值。