开发者工具·Unix时间戳转换器
时区不是偏移:IANA tz 数据库及其重要性
· 背景
时间戳 时区 浏览器 API
偏移量是一个数字;时区是数字的历史及其变化的规则。这篇文章解释了其中的差异,介绍了对其进行编码的 IANA tz 数据库,并说明了转换器依赖它进行本地读取的原因。
移动了一个小时的会议 — 存储的 +02:00 偏移量在 7 月是正确的,在 12 月是错误的
在 7 月会议旁边保存的固定 `+02:00` 可以作为当时的忠实阅读,但通常在 12 月仍然会失败。偏移量是一个结果;区域是能够在不同日期产生结果的规则上下文。将其中一个存储为另一个会冻结快照。
ToolAcre 的本地行要求 Intl 格式化每个日期并请求一个短数字偏移量。它不会向纪元添加配置常量。这种设计允许环境的适用规则分别影响每个瞬间。
偏移量与区域 — 距 UTC 的固定距离与具有 DST 规则和更改历史记录的命名区域
偏移量表示渲染时钟在某一时刻与 UTC 的距离有多远。一个命名区域可以携带一系列偏移规则和历史变化。时代本身两者都没有。当应用程序同时需要事件和基于地点的时间表时,这些概念应该占据不同的字段。
对于不可变事件,存储瞬间可能就足够了。对于“每天在此区域的 09:00 开放”,请保留指定区域,因为将来的实例必须从挂起时间解析。重用昨天的偏移量会将动态规则视为永久数字属性。
IANA tz 数据库 — 区域/City 名称、为什么它是政治决策的记录以及更新频率
该工作簿命名为 IANA 数据库、政治出处和更新频率。该实现报告来自 `resolvedOptions()` 的 IANA 样式区域名称,但不公开数据库版本、更新计划或源包。这些细节在此不予断言。
此限制会影响复制。如果机器之间的旧日期输出不同,请记录区域字符串和平台版本;不要仅从时钟来断言哪个规则集更新。命名区域改善了这个问题,但转换器不是时区数据检查器。
需要可重现历史输出的应用程序应控制其区域数据依赖性并测试代表性日期。依赖于未指定的浏览器环境代表了这种再现性。
此实现不会公开命名区域规则来源和更新节奏
ToolAcre 通过 Intl 向浏览器询问其本地区域和格式。存储库无法确定规则是否来自操作系统、浏览器包或其他运行时组件。它捕获故障并安全回退,而不是暴露内部架构。
因此,“本地”是指浏览器在转换时选择的环境。更改设备设置可以更改输出,而无需更改纪元。对于审计跟踪,保留 UTC 和原始计数;使用本地显示作为上下文而不是规范存储。
格式化程序故障时回退到 ISO 会保留瞬间,但会丢失所请求的本地演示文稿。消费者应将其视为显示上下文的减少,而不是日期的更改。
浏览器选择并格式化其本地区域;其规则的来源未被断言
选择两个相隔六个月的 UTC 时刻,例如 `2025-01-15T12:00:00Z` 和 `2025-07-15T12:00:00Z`,将它们转换为秒,然后检查一台设备上的本地行。记录数字偏移量是否不同。观察结果对于显示的区域和环境有效。
工作簿规定了 Europe/Berlin 偏移量,但这些命名区域规则并未从实现中读取。这种可重复的练习避免了不受支持的表,同时教授相同的区别:一个区域查询、两个时刻以及可能的两个偏移结果。
如果偏移量匹配,则观察结果仍然提供信息:配置的区域在该环境中的那些选定时刻没有暴露季节性差异。
工作示例:在两个日期观察一个浏览器区域,而不是硬编码柏林规则
专家组请求 `timeZoneName: "shortOffset"`,它支持数字关系,例如 GMT+1 而不是区域缩写。这种选择减少了对标签的依赖,标签的含义可能因上下文而异,尽管准确的 Intl 格式仍然是平台输出。
对于存储的数据,使用由应用程序选择的库定义的规范区域标识符,而不是显示缩写。面向用户的短标签可能会有所帮助,但它不应该成为重建未来时间表的关键。
数字偏移在某一时刻作为算术保持明确。它们的局限性在于缺少规则标识,而不是无法将一个时钟读数映射回 UTC。
存储的数据中避免使用缩写;格式化程序请求一个短数字偏移量
经常性的未来调度需要间隙、重叠和策略处理,而此转换器不提供。它以已解决的日期或纪元开始并呈现它。它不会在两个重复的本地时间之间进行选择,也不会修复不存在的本地时间。
使用区域感知调度库,其行为已根据您的要求进行测试,然后在此处检查已解决的事件(如果有帮助)。将分辨率与显示分离可以防止简单的转换器意外成为具有未定义边缘策略的调度程序。
然后,调度程序的输出可以存储为一个纪元以供执行,同时保留区域和原始挂机时间意图以供将来重新计算或解释。
要点:将瞬间存储为纪元,将地点存储为区域名称 - 以及 Unix 时间戳转换器如何使用浏览器的区域进行本地读取
将时刻存储为明确的纪元单位或规范的 UTC 字符串,并在位置本身很重要时存储命名区域。偏移量可以伴随输出进行解释,但它不能替代任一字段。 ToolAcre 的 UTC 行和本地行证明了这种分离。
当本地结果令您惊讶时,请在更改数据之前检查区域标签、即时和偏移量。固定偏移补丁可能会使一个日期看起来正确,而另一个日期看起来错误。耐用的模型使事件保持稳定,并让经过验证的区域规则为其钟面提供支持。
该模型还支持旅行:用户可以在新的本地区域中查看一个存储的瞬间,而无需重写事件或丢失其原始调度上下文。