日期与时间边界是什么
日期时间边界密集:月末月初、年末年初、闰年 2 月 29 日、时区切换与跨天统计口径。时间类缺陷隐蔽性极强:平时不出现,跨日、跨年或时区切换时才爆发;把固定边界清单加入回归集,是成本最低的防御手段。
基本信息
| 固定清单 | 月末、月初、年末、年初、闰年 2 月 29 日 |
|---|---|
| 闰年规则 | 2024 是闰年;2100 不是;2000 是(百年只有被 400 整除才闰) |
| 时区 | UTC 与东八区对同一时刻的归日可能不同 |
| 统计口径 | 按用户本地时间还是 UTC 归日,需要业务先确认 |
| 特殊时刻 | 23:59 与 00:00、涉及夏令时地区的切换日 |
取值清单
取值清单
# 月末与月初
1 月 31 日、2 月 28 或 29 日、3 月 1 日
# 闰年边界
2024-02-29、2100-02-28(2100 非闰年)
# 跨年与跨天
12-31 23:59 与 01-01 00:00
# 时区
同一时刻 UTC 与东八区归日不同典型使用场景
- 统计报表:跨天、跨月对账,验证归日口径一致。
- 定时任务:月末与年末触发时间的正确性。
- 有效期与过期:优惠券、令牌在边界时刻的行为。
- 倒计时与日历:闰年与月末的天数计算。
- 跨时区用户:同一时刻在不同时区看到的日期。
- 回归固化:把闰年与月末用例加入固定回归集。
边界类型速览
| 边界 | 取值 | 典型缺陷 |
|---|---|---|
| 月末 | 1 月 31 日、2 月 28 或 29 日 | 跨月计算差一天 |
| 闰年 | 2 月 29 日 | 年度统计少一天或多一天 |
| 跨年 | 12-31 与 01-01 | 序号与账期断裂 |
| 时区 | UTC 与东八区 | 归日不同、对账不平 |
统计类功能要明确口径:按用户本地时间还是 UTC 归日,测试需覆盖跨时区用户场景。
可注入时钟是首选:把「现在」固定住,断言才稳定;直接改机器时间会影响并行用例。
链路各层都可能做时间转换(数据库、应用、前端),按系统约定在端点用 UTC、显示层再转是常见做法,测试逐层核对。