连续登录 7 天的判断用结束时间减开始时间再除以 86400,3 月 8 日那天用户明明登录了,算出来是 6.958 天,取整后只有 6 天。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,把一天固定当成 86400 秒,春季拨快那天本地只有 23 小时,秋季回拨那天有 25 小时。除法结果不是整数,向下取整就少一天,跨月累计还会继续偏。
「夏令时日长」这类改动最怕改一半,回滚脚本先准备好,再动生产。报错里带路径的,先去看那个路径在不在、权限对不对。
from datetime import datetime
from zoneinfo import ZoneInfo
a=datetime(2026,3,1,tzinfo=ZoneInfo('America/New_York'))
b=datetime(2026,3,8,tzinfo=ZoneInfo('America/New_York'))
print((b-a).total_seconds()/86400)
同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
具体做法是,按日历日期比较 两端先转成当地日期再相减;用语言自带的 Period 或 daysBetween 别手写除法;登录日期存 DATE 类型 不要带时分秒;跨越切换日的用例单独补一条断言。
最后用这个标准收尾,同一段日期用日历天数得到 7 用秒数除法得到 6.958 修复后两边都返回 7。
