小时/分钟重复
- 重复单位新增
RepeatUnit.HOUR/RepeatUnit.MINUTE(常量追加,既有值不变,持久化的repeatUnitInt 兼容) - 语义为真实时长格点(ISO 8601 time-based 惯例):出现 = 锚点 + 步数×间隔,跨日连续、每 8 小时就是 8 个真实小时;跨夏令时间隔不变、本地钟面漂移 1 小时(与天及以上单位的钟面格点语义分界,文档已写明)
nextTarget(含until封顶与锚点豁免)/previousTarget(含等于)/anchor全部支持,均为 O(1) epoch 秒算术;lunar与小时/分钟无关- 小时/分钟推算不经「日期 + 时刻 + 时区」组合,不受 0001..9999 日期界守护约束(Instant 值域内任意推进,不抛越界异常),KDoc 已写明
修复
- 天/周快路径的步数估计曾用 Duration 纳秒差:锚点距 now 超约 292 年即 Long 饱和,「0001 年锚点 + 每日重复」会误抛
IllegalStateException;改用 epoch 秒差后远古锚点正常落位(nextTarget与previousTarget两处)
测试
- 138 → 150 用例(× JVM / Android / wasm 三平台,iOS 由 macOS CI 执行):小时/分钟推进与含等于、跨日连续、锚点豁免与封顶、跨春令时本地钟面漂移(实测 +18 真实小时 = 04:00,钟面 +18h 为 03:00)、previousTarget 三态、两千年分钟格点无溢出、0001 年天/1500 年周远古锚点回归、常量校验与 lunar 无关性、正反对偶不变量
- 探针记录:上海远古年份 LMT 偏移 +08:05:43(秒级分量),长跨度格点对齐断言以
anchor(zone)为参照;天/周钟面格点跨 1901 年 LMT→CST 换偏移后 epoch 对齐不保持(按本地日期断言)
Full Changelog: v2.1.0...v2.2.0