开发者工具·Unix时间戳转换器
并非每个纪元都是 1970:NTP、Windows FILETIME、GPS 和 Excel 日期
· 背景
时间戳 数据格式 调试
Unix 的 1970 起源只是众多起源之一。这篇文章调查了您将在文件和协议中遇到的纪元(1900、1601、1904、1980、2001),并展示如何识别根本不是 Unix 时间的值。
落在 1900 中的时间戳 — 来自网络捕获的值,任何单位选择都无法使其有意义
数据包捕获中的数字可能会在秒和毫秒内产生无意义的结果,因为单位不是唯一的隐藏参数。 Epoch 表示选定的零点; Unix 使用 1970,而另一个协议可能从其他地方计数。重新缩放无法修复错误的原点。
当两个 ToolAcre 读数与已知事件时间冲突时,停止切换。确定字段名称、生产者、协议版本和记录来源。不断地删减数字直到出现可信的年份,将调查转化为巧合。
当出现合理日期但与周围事件冲突时,同样的诊断也适用。合理性是一项薄弱的检查;出处和已知的参考事件更强。
NTP 和 1900 — 自 1900-01-01 起的秒数,带有 32 位分数,以及它带来的 2036 翻转
该工作簿提供了 NTP 的起源、分数布局和滚动日期。 Unix 转换器中没有实现或测试任何内容,因此本文不证明这些细节。网络捕获必须根据发送者和解析器使用的协议文档进行解码。
只有在导出 Unix 秒后,该值才应输入此工具。保留纪元或翻转上下文,因为一个固定宽度字段可能无法单独识别它。假设时代的完美 UTC 结果可能内部一致,但外部错误。
协议字段还可以拆分整体和分数部分。在没有指定比例的情况下将它们连接或十进制化会创建一个新的数字,这不是兼容解码器想要的。
NTP 转换详细信息和翻转行为需要源文档,此处不存在
同样,指定的 Windows 和 .NET 计数器不是接受的模式。存储库不包含其起源或刻度范围的常量。在开发人员尝试转换之前,它们的大十进制值可能会超出 JavaScript 的精确整数范围。
使用基于平台文档定义的整数安全库,将原始数据保留为文本或宽整数,然后发出 Unix 值。不要减去记住的浮点偏移量。当源分辨率精细于毫秒时,低端的精确度就很重要。
往返测试应包括具有非零亚秒数字的值。整秒装置无法暴露 100 纳秒或毫秒余数是否被正确保留。
FILETIME 和 .NET 定义不是由 ToolAcre 实现的,也不是从内存中断言的
电子表格日期引入了不同的表示形式:由工作簿日期系统设置解释的数字序列。该工作簿的 1900 怪癖和较旧的 Mac 声明需要电子表格源,此处未建立。 ToolAcre 不读取工作簿元数据。
使用电子表格感知工具检查文件,确定配置的日期系统并使用该库保留小数日精度。将序列视为 Unix 秒可能会产生一个早期的 1970 日期,看起来像一个普通的比例错误,而实际问题是原点和单位在一起。
工作簿设置可以随文件一起移动,因此两个视觉上相似的连续剧可能使用不同的来源。转换属于元数据可用的文档边界。
电子表格串行系统和怪癖需要电子表格特定的证据
大纲中命名的 GPS 和 Apple 相关纪元也在实现之外。它们的关系可能涉及超出恒定原点变化的尺度约定。如果没有权威证据,这里不会发布当前的抵消或转换公式。
一般诊断仍然传输:识别零、刻度持续时间和来自生产者的跳跃约定。然后使用适当的库进行转换,并根据同一数据集中的已知时间戳进行验证。三个独立的事实比小数宽度的猜测更安全。
对于跨越约定,谨慎尤为重要。适用于一种规模和日期的常数可能并不是每对系统之间的永恒关系。
GPS 和 Apple 历元关系需要本模块之外的权威来源
一个可防御的工作方法从一个已知时刻开始,例如 ToolAcre 验证的 `2025-02-03T10:23:00.000Z`,等于 1,738,578,180 Unix 秒。对于另一个有记录的纪元,使用该系统的官方起源和整数算术比例来计算其值,然后使用相同的定义将其转换回来。
将往返行程与 Unix ISO 字符串进行比较并保留推导。本文有意不使用未读取的常量填充五纪元表。该方法公开了每个假设,并且可以根据实际生成数据的任何协议或文件格式进行审查。
工作方法:在记录的时代中导出一个瞬间,而不是发布未经验证的常量
ToolAcre 不会自动识别或转换外部纪元。它的单位菜单显示秒和毫秒,两者都在 config 中的 Unix 定义下。自动检测仅在 1011 级的尺度之间进行选择;它永远不会改变零点。
这种狭隘的合同可以防止错误的信心。如果外部计数碰巧落在可信的 Unix 日期上,转换器无法警告来源错误。出处必须在算术之前输入。用代码记录转换,而不是依赖手动操作手册。
可见的自动标签仅报告秒或毫秒。它永远不应该被引用作为发生起源检测的证据,因为源代码中不存在这样的分支。
要点:知道您从哪一个零开始计数 — 以及 Unix 时间戳转换器如何清楚地告诉您它读取的是 Unix 秒或毫秒
知道您从哪个零开始计数、一个刻度有多大以及源如何处理其时间刻度。仅当这些问题解决到 1970 UTC 以来的秒或毫秒后,Unix 转换器才会回答。它无法从一个整数推断语义。
使用难以置信的双重读数作为调查起源的信号,而不是作为继续尝试除数的许可。一旦源转换产生 Unix 值,ToolAcre 就会提供有用的独立 UTC 和本地健全性检查,同时保持其自己的假设可见。
一个好的适配器会命名外部类型,执行一个源转换并发出一个品牌 Unix 值。该设计可防止原始计数器泄漏到通用日期构造函数中。