时间戳 | 纪元时间 | 转换

> 时间戳 | 纪元时间 | 转换 <

// 即时将Unix时间戳转换为日期,或将日期转换为时间戳

当前时间戳
[实时]

实时时钟

实时更新的Unix时间戳显示。实时查看当前的epoch时间。

[双向]

双向转换

将时间戳转换为可读日期,或将日期转换为时间戳。支持两个方向。

[免费]

多种格式

以ISO 8601、RFC 2822、UTC、本地时间和相对时间格式查看结果。

// 关于UNIX时间戳

Unix时间戳工作原理:

Unix时间戳(也称为epoch时间或POSIX时间)表示自1970年1月1日 00:00:00 UTC(Unix纪元)以来经过的秒数。这个简单的整数值提供了一种通用的、不依赖时区的时间表示方式。

示例:

1711324800 → 2024-03-25T00:00:00.000Z

常见用例:

  • >数据库时间戳存储和查询
  • >API响应时间字段
  • >日志文件时间戳分析
  • >调试时间相关问题
  • >跨时区时间协调
  • >Y2K38问题:32位有符号整数将在2038年1月19日溢出

>> 常见问题

问:什么是Unix时间戳?

答:Unix时间戳是自1970年1月1日 00:00:00 UTC以来经过的秒数。它是计算机科学中普遍使用的简单整数值。

问:什么是epoch时间?

答:Epoch时间是Unix时间戳的另一个名称。“纪元”指的是参考点:1970年1月1日 00:00:00 UTC。

问:什么是Y2038问题?

答:2038年问题(Y2K38)是因为许多系统将Unix时间戳存储为32位有符号整数,只能表示到2038年1月19日 03:14:07 UTC的时间。

问:秒和毫秒时间戳有什么区别?

答:秒级Unix时间戳为10位数(如:1711324800),毫秒级为13位数(如:1711324800000)。

问:Unix时间戳可以是负数吗?

答:可以,负的Unix时间戳表示1970年1月1日之前的日期。例如,-86400表示1969年12月31日。

// 常见的 epoch 数值

调试时间戳时很有用的参考点,所有日期均为 UTC。

Epoch 数值日期和时间(UTC)
01970-01-01 00:00:00
864001970-01-02 00:00:00
9466848002000-01-01 00:00:00
10000000002001-09-09 01:46:40
12345678902009-02-13 23:31:30
17000000002023-11-14 22:13:20
20000000002033-05-18 03:33:20
21474836472038-01-19 03:14:07
42949672952106-02-07 06:28:15

// 在代码中将 epoch 转换为日期

JavaScript  new Date(epoch * 1000).toISOString()
Python      datetime.fromtimestamp(epoch, tz=timezone.utc)
PHP         gmdate('c', $epoch)
Go          time.Unix(epoch, 0).UTC()
Java        Instant.ofEpochSecond(epoch)
MySQL       FROM_UNIXTIME(epoch)
Bash        date -u -d @$epoch   # macOS: date -u -r $epoch

>> 更多问题

问:为什么 Unix 时间从 1970 年 1 月 1 日开始?

答:1971 年前后,贝尔实验室的早期 Unix 开发者选了一个简单、整齐且当时较新的日期,以便让 32 位计数器保持较小。它沿用至今,成为大多数系统的标准纪元。

问:如何在 Excel 或 Google 表格中把 epoch 转成日期?

答:假设 A1 是 epoch 秒数,输入 =(A1/86400)+25569,再把单元格格式设为日期时间。毫秒则除以 86400000。反向公式为 =(A1-25569)*86400。

问:为什么 epoch 转换结果和预期的日期不一样?

答:常见原因:秒与毫秒混淆(13 位数是毫秒)、显示时区不同(同一个 epoch 在 UTC 与本地时间显示不同)、系统使用了其他纪元(NTP 为 1900 年,Windows FILETIME 为 1601 年)。

问:epoch 的最大值是多少?

答:有符号 32 位整数最大为 2,147,483,647(2038-01-19 03:14:07 UTC),无符号 32 位为 4,294,967,295(2106-02-07 06:28:15 UTC)。64 位数值可表示数千亿年。

// 其他语言