开发者工具·Unix时间戳转换器
一个时间戳,两个时钟:为什么 UTC 和本地时间在一个纪元内不同
· 工作原理
时间戳 unix 时间 时区
纪元值命名一个时刻,但您看到的挂钟时间取决于您所在的位置。这篇文章解释了偏移算术、为什么日期本身可能不同,以及为什么转换器显示两个读数。
客户说 9 上午,日志显示 16:00 — 同一事件、两个时钟和一张无济于事的支持票
当有人报告“早上九点”而应用程序日志记录 16:00 时,支持案例可能会陷入停滞。在知道事件的区域或偏移量之前,这两个时钟标签都不会识别事件。如果两个引用解析为同一纪元,则搜索七小时的处理延迟会浪费对显示差异的调查。
首先收集原始时间戳和每个观察者的区域上下文。 ToolAcre 显示 UTC 和一次转换的当前浏览器本地读数,因此对于持有日志的人来说,可以立即进行比较。其他地方的同事应该比较共享的 ISO 值,而不是假设第一个人的本地行适用于他们的机器。
纪元是一个瞬间,而不是挂钟时间 - 自 1970 以来没有自己的区域的秒数
纪元是距 1970-01-01T00:00:00Z 的距离(以秒或毫秒为单位)。它不包含城市、夏令时标志或首选时钟符号。因此,值 1,700,000,000 标识一个时刻;周二晚上或周三早上等标签是在选择如何阅读该时刻后做出的预测。
这就是为什么存储校正后的“本地纪元”是一个类别错误。添加偏移量会更改另一时刻的计数和点。存储或传输原始时刻,然后在人们需要日历的边缘应用读取规则。 ToolAcre 通过在格式化输出旁边保留数字秒和毫秒来遵循该形状。
如何应用偏移量 — 添加或减去小时和分钟、半小时和 45 分钟区域以及一年中变化的偏移量
对于固定偏移量,算术很简单:UTC+09:00 显示时钟比 UTC 早 9 小时,而 UTC−05:00 显示落后 5 小时。一小时的小数部分按分钟处理,因此四十五分钟的偏移量不能安全地通过四舍五入到整数小时来表示。该标志属于显示的本地读数。
固定偏移量仍然只是一个观察值。 ToolAcre 向 Intl 询问适用于浏览器当前区域中所选时刻的偏移量。它并不假设今天的抵消额适用于全年。因此,将一个偏移量复制到应用程序配置中可能会在测试期间显得正确,但在环境的适用规则发生变化时会失败。
当日期也发生变化时 — UTC 和本地不同日历日的接近午夜的时刻
时钟运算可以跨越日历边界。 00:20 UTC 的时刻出现在前一个日期的负偏移量下,稍后出现在正偏移量下的同一日期。因此,仅记录“14 日”的票证可以引用 UTC 日志的不同部分,即使两个参与者都准确地记得自己的日历。
在团队之间传递事件时使用完整的日期、时间和偏移量。转换器的 ISO 行可防止日期与 UTC 分离,而本地行则提供熟悉的上下文。如果事件跨越午夜,请按纪元或 UTC 对条目进行排序,而不是对在多个区域中写入的人工标签进行排序。
工作示例:1700000000(UTC)、UTC+9 区域和 UTC−5 区域 — 写出的算术和比较的日期
现有已发布的单元文章规定 1,700,000,000 秒为 `2023-11-14T22:13:20.000Z`。在固定的 +09:00 读数下,增加九个小时即可获得 2023-11-15 07:13:20;在固定的−05:00下,减去五个小时即可得到2023-11-14 17:13:20。仅东部示例中的日期发生变化。
这两个偏移读数是算术演示,而不是有关该日期指定城市的声明。应允许 ToolAcre 本地行报告 Intl 为实际浏览器区域提供的任何偏移量。将其与 UTC 值进行比较,并记下显示的偏移量,而不是将任一说明性值强加到结果上。
工作示例:UTC 中的一个纪元,然后是两个显式固定偏移读数
显示两个读数可以消除调试会话中的心理减法。服务器团队可以引用 UTC,而重现问题的人可以识别他们看到的本地时钟。由于两行均源自一个日期,因此匹配的秒和毫秒证明它们没有被独立编辑或舍入为单独的事件。
这对在屏幕截图中特别有用:包括单位注释和 ISO 行,而不是裁剪为熟悉的本地值。旅行或区域设置更改后,可以重新解释裁剪后的时钟。纪元加上 ISO 保持稳定,本地渲染解释了用户体验,而无需替换该稳定的参考。
这不包括什么 - 历史偏移量变化和政治时区决策,它们存在于 tz 数据库中而不是算术中
简单加法无法描述适用偏移量变化的区域。转换器将本地格式化委托给 Intl,但其存储库不会公开底层规则表或历史决策。因此,本文不会列出过去的变化、预测未来的政策或承诺携带不同数据的引擎具有相同的输出。
当应用程序必须在此位置调度“09:00”时,请保留指定区域并使用区域感知调度设计。当它必须记录“这个请求现在发生”时,请保留一个瞬间。这些是不同的数据要求。固定的 `+02:00` 可以描述某一时刻的读数,而无需识别产生该读数的区域规则。
固定偏移算术无法重现不断变化的区域规则
将纪元视为穿过时间线的大头针,将钟面视为放置在其周围的标签。 UTC 提供通用标签;本地格式化提供了一种方便的方式。 ToolAcre 在不修改引脚的情况下呈现两者,这就是为什么预计会有时间差异而不是损失时间的证据。
对于有争议的事件,粘贴原始计数,明确说明单位,并共享 ISO 输出。然后仅附加本地读数作为注释。该顺序将“我的时钟与你的时钟”转变为可检查的映射,并防止日期边界变化伪装成不同日期的事件。