U3.06.4DST and timezone artifacts设计
时区与夏令时会在时间轴上制造重复或缺失的小时
别名: 夏令时伪影 · 时区重复小时
概念解释
时间轴看似连续均匀,钟表时间却有两处人造的裂缝。夏令时切换:春天拨快一小时,那天只有 23 小时——切换时刻的曲线出现断崖;秋天拨回,25 小时的一天让同一钟表时刻出现两次——01:30 到 02:30 的数据被折叠加倍,图上呈尖峰。时区:多区域数据聚合到同一轴时,"各地的 9 点"不是同一时刻,跨区比较的是错位的相位。这些是数据管道层面的真实伪影,画图前不处理,轴上的"异常"会被当成业务事件去解释。
机制
钟表时间是政策产物而非物理量:DST 切换在钟表坐标上制造不连续(春跳)与多值性(秋叠),折线图对两者都敏感——跳变画成断崖,重叠画成双高。按钟表小时聚合的统计(每小时订单数)在切换日天然失真:23 小时的天总量偏低、特定小时翻倍。时区问题的机制是坐标系不统一:UTC 存储的.timestamp 被本地化到不同时区后,日边界("每天"从几点算起)随区漂移,日聚合、周聚合的结果随所选时区改变——同一数据在 UTC 与本地时区的"日活跃"可以差出一段清晨流量。
边界
处理策略按受众定:单一时区受众用本地钟表时间(符合直觉),但 DST 切换日的图必须标注;跨时区受众或技术场景统一 UTC(消除多值与跳变),代价是"本地几点"要读者换算。混合策略(存储 UTC、展示按用户时区本地化、聚合口径声明)是产品默认。DST 无夏令时的地区(如中国)不产生本地伪影,但接全球数据管道时仍会在源数据里遇到。逐小时以下的细粒度对这类伪影最敏感,日级以上基本稀释。
怎么落地
- 数据层先消毒:存储一律 UTC,DST 切换日打标记(
is_dst_shift_day),按钟表小时的聚合在切换日做 23/25 小时归一或剔除声明。 - 图层标注:切换时刻画垂直参考线并注明"夏令时切换";重复小时的叠加段用阴影提示"两倍计数"。
- 验证:检查每年两个切换日附近的曲线;无标注却有断崖或尖峰的,先查日历再谈业务解释。