> 时间戳 | 纪元时间 | 转换 <
// 即时将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) |
|---|---|
| 0 | 1970-01-01 00:00:00 |
| 86400 | 1970-01-02 00:00:00 |
| 946684800 | 2000-01-01 00:00:00 |
| 1000000000 | 2001-09-09 01:46:40 |
| 1234567890 | 2009-02-13 23:31:30 |
| 1700000000 | 2023-11-14 22:13:20 |
| 2000000000 | 2033-05-18 03:33:20 |
| 2147483647 | 2038-01-19 03:14:07 |
| 4294967295 | 2106-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 位数值可表示数千亿年。