← 中文资源

简体中文版本

时区与日期处理评审工作流

审查时间的存储、传输与展示、以 UTC 为基准并在边界显式处理时区,并围绕夏令时与月末边界进行测试。

阅读英文原文

概述

时间缺陷往往在夏令时切换或月末才暴露,且难以复现。核对时间戳是否以 UTC 与明确类型存储、接口是否传输含偏移或 Z 的 ISO 8601、是否仅在展示时转换,并围绕 DST 与日历边界测试,可消除这类隐蔽缺陷。

关键步骤

  1. 确认时间戳以 UTC 与明确类型存储。
  2. 检查接口传输 ISO 8601 含偏移或 Z。
  3. 仅在展示时转换为用户时区。
  4. 围绕 DST、月末与闰日测试。

验证

  • 跨 DST 的测试显示正确的本地时间。
  • 无缺少时区的存储时间戳。
  • 不同用户看到正确本地时间。
  • 标准有文档记录。

决策点

瞬时时间应以 UTC 存储,仅当墙上时间重要(如循环闹钟)才另存时区;时区处理应使用具备时区能力的库。

适用范围

本条目围绕「时区与日期处理评审工作流」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。

// store UTC, convert at display
const instant = new Date().toISOString(); // 2026-10-23T12:00:00Z
const local = new Intl.DateTimeFormat('en-GB', { timeZone: userTz, timeStyle: 'short' }).format(new Date(instant));