Unix时间戳到日期转换器:支持12/24小时格式
将Unix时间戳转换为人类可读的日历日期和时间。工具会自动识别输入的时间戳属于秒、毫秒还是微秒精度,无需手动选择单位,并可在12小时制和24小时制之间自由切换显示格式,方便程序员调试服务器日志文件、排查数据库时间字段和检查API接口返回的原始时间戳数据是否正确。
Unix 时间戳转换器
Unix 时间戳是自 1970 年 1 月 1 日(UTC)以来的秒数
转换后的日期和时间
什么是 Unix 时间戳?
Unix 时间戳是自 1970 年 1 月 1 日(UTC/GMT 凌晨)以来经过的秒数,不计算闰秒。它广泛用于 Unix 系统和编程语言中的日期和时间计算。
文档
Unix 时间戳转日期转换器
Unix 时间戳是表示某个特定时间点的数字。它计算自 UTC 时间1970年1月1日午夜以来经过的整秒数,这一时刻称为 Unix 纪元。此工具会将 Unix 时间戳转换为日历日期和时钟时间,并以24小时制或12小时制显示。
如何把 Unix 时间戳转换为日期
基本公式很简单:
日期 = Unix 纪元(1970-01-01,00:00:00 UTC)+ 时间戳(以秒为单位)
要将原始秒数转换为日期,只需从1970年1月1日起加上相应的秒数。然后,结果必须拆分为年、月、日、时、分和秒。难点就在于这一步,因为计算必须考虑闰年(闰年会给二月增加一天),以及每个月的天数不同。大多数编程语言都有内置的日期函数,可以自动完成这些计算,因此不需要逐步手算。
计算示例
以时间戳1609459200为例。
- 除以一天的秒数:1,609,459,200 ÷ 86,400 = 18,628天。
- 从1970年1月1日起向前数18,628天,并在此过程中记录闰年。
- 数到的日期是2021年1月1日。
因此,1609459200转换为 UTC 时间星期五,即2021年1月1日00:00:00。星期几也可以通过同样的日数计算得出。
转换器显示的是浏览器报告的时区中的结果,而不是 UTC 时间。纽约的读者看到的同一时间戳是星期四2020年12月31日19:00:00,因为当天纽约时间比 UTC 早五小时。
时间戳也可以是负数,表示1970年以前的日期。例如,-86400正好是 Unix 纪元前一天:UTC 时间1969年12月31日00:00:00。
时间戳的精度单位:秒、毫秒和微秒
并非所有系统都以秒为单位计时。此转换器会根据时间戳的位数判断其精度:
| 位数 | 精度 | 示例 |
|---|---|---|
| 10 | 秒 | 1609459200 |
| 13 | 毫秒 | 1609459200000 |
| 16 | 微秒 | 1609459200000000 |
负时间戳中的负号会额外占用一个字符,因此-1609459200(11个字符,10位数字)仍会按秒读取。其他任何位数都按普通秒数处理。在应用上述秒数公式之前,毫秒值和微秒值会分别除以1,000或1,000,000。
12小时制和24小时制时间格式
转换器提供两种显示一天中时间的方式。
- 24小时制将小时从0计数到23,不使用 AM 或 PM 标记。程序员有时称其为军用时间。下午3:00写作15:00。
- 12小时制将小时从1计数到12,午夜至中午使用 AM,中午至午夜使用 PM。24小时制的15:00会转换为3:00 PM。
24小时制在欧洲大部分地区、拉丁美洲和亚洲,以及世界各地的科学、军事和医疗领域都是标准格式。12小时制仍常用于美国、加拿大和其他少数英语国家的日常生活。
日期的支持范围
此转换器接受从-62135596800到253402300799的任意时间戳。这涵盖了从1年1月1日起至9999年12月31日的所有日期,采用延伸至过去的公历(即将现代日历向过去延伸到其1582年引入之前)。超出此范围的时间戳会因范围错误而被拒绝。
2038年问题
许多较旧的计算机系统将 Unix 时间戳存储为32位有符号整数,其最大计数值只有2,147,483,647。纪元之后经过这么多秒的时间点是 UTC 时间2038年1月19日03:14:07。超过这一时刻后,未修补的32位系统会回绕为负数,并将日期识别为1901年,而非2038年。这称为2038年问题。它并不影响所有系统:现代软件如果将时间戳存储为64位数字,或像 JavaScript 那样存储为普通数字,就可以表示远超2038年的数千年日期,而不会发生溢出。
Unix 时间戳的常见用途
Unix 时间戳在计算领域随处可见,因为它们占用空间小,且便于比较或排序:
- 数据库行用它们记录一条记录的创建时间或最后修改时间。
- Web 服务器在 HTTP 标头和 Cookie 中使用它们来控制缓存和过期。
- 日志文件为每个事件加上时间戳,以便按顺序排列条目。
- Git 和其他版本控制系统以这种方式记录提交时间。
- Web API 使用它们标记数据生成或最后更新的时间。
常见问题
什么是 Unix 纪元? Unix 纪元是 UTC 时间1970年1月1日午夜。它是所有 Unix 时间戳计数的零点。
Unix 时间戳包含闰秒吗? 不包含。Unix 时间每天严格计数86,400秒,并忽略偶尔加入 UTC 的闰秒,因此会与天文时间逐渐产生轻微偏差。
Unix 时间戳可以是负数吗? 可以。负值表示1970年1月1日之前的日期。
为什么我的时间戳有13位数字,而不是10位? 13位时间戳以毫秒而不是秒为单位。JavaScript 的Date.now()和许多 Web API 返回以毫秒为单位的时间戳,因此13位数值在 Web 开发中很常见。
Unix 时间戳在每个时区都相同吗? 数字本身不属于任何时区。它始终计算自 UTC 纪元以来经过的秒数。将其转换为当地日期和时间意味着加上相应时区的偏移量,这就是该转换器的输出会遵循运行它的设备所在时区的原因。
此转换器能处理的最晚日期是什么? 是 UTC 时间9999年12月31日23:59:59,对应的时间戳为253402300799。最早日期是公元1年一月1日,UTC 时间00:00:00,对应的时间戳为-62135596800。