Unix 时间戳转换器
这个 Unix 时间戳转换器可在 Unix 纪元时间戳和人类可读日期之间相互转换。输入时间戳或日期,即可查看对应的转换结果,支持毫秒精度和多时区显示。
当前 Unix 时间戳
--
毫秒: --
常见问题
什么是Unix时间戳?
Unix时间戳(也称为Unix时间、POSIX时间或纪元时间)是自1970年1月1日00:00:00 UTC(即Unix纪元)以来经过的秒数。它提供了一种简单、与时区无关的方式,将特定时刻表示为单个整数。例如,时间戳1700000000代表2023年11月14日22:13:20 UTC。
如何将Unix时间戳转换为日期?
要将Unix时间戳转换为人类可读的日期,将时间戳乘以1000(如果以秒为单位)得到毫秒,然后创建日期对象。在JavaScript中:new Date(timestamp * 1000)。在Python中:datetime.fromtimestamp(timestamp)。我们的转换器自动处理此操作,并以多种格式显示结果,包括ISO 8601、RFC 2822和本地时间。
什么是纪元时间?
纪元时间是指计算系统中计时的起点。Unix纪元是1970年1月1日00:00:00 UTC。这个日期是在Unix于20世纪70年代初开发时选择的方便参考点。所有Unix时间戳都计算为自此纪元以来经过的秒数,使其成为跨系统的通用时间参考。
为什么Unix时间从1970年开始?
Unix时间从1970年1月1日开始,因为贝尔实验室的早期Unix开发人员选择该日期作为方便、最近的参考点。原始Unix系统是在20世纪60年代末开发的,1970年是接近系统创建日期的整数。使用固定纪元使时间计算变得简单:只需从这个参考点加减秒数。
什么是2038年问题?
2038年问题(Y2K38)发生是因为许多系统将Unix时间戳存储为32位有符号整数,最大值为2,147,483,647。这对应于2038年1月19日03:14:07 UTC。在这一时刻之后,整数溢出并变为负数,被解释为1901年12月13日。大多数现代系统现在使用64位整数,将范围延伸到约2920亿年。
如何获取当前Unix时间戳?
在JavaScript中:Math.floor(Date.now() / 1000)。在Python中:import time; int(time.time())。在PHP中:time()。在Bash中:date +%s。在Java中:System.currentTimeMillis() / 1000。这些都返回自Unix纪元以来的当前秒数。注意,JavaScript中的Date.now()返回毫秒,因此除以1000得到标准的基于秒的时间戳。
Unix时间戳的秒和毫秒有什么区别?
以秒为单位的Unix时间戳是10位数字(例如1700000000),计算自纪元以来的秒数。毫秒时间戳是13位数字(例如1700000000000),计算自纪元以来的毫秒数。JavaScript的Date.now()返回毫秒,而大多数服务器端语言使用秒。转换方法:毫秒 = 秒 × 1000,秒 = 毫秒 / 1000。
10位和13位Unix时间戳有什么区别?
10位Unix时间戳表示自1970年1月1日以来的秒数(例如,1710936000 = 2024年3月20日)。13位时间戳表示毫秒(例如,1710936000000 = 同一时刻,具有毫秒精度)。大多数编程语言和数据库使用秒(10位),而JavaScript的Date.now()返回毫秒(13位)。本转换器根据位数自动检测格式。
如何在Excel中转换Unix时间戳?
要在Excel中将Unix时间戳转换为日期,使用公式:=(A1/86400)+DATE(1970,1,1),其中A1包含以秒为单位的时间戳。对于毫秒,使用:=(A1/86400000)+DATE(1970,1,1)。将单元格格式设置为日期/时间以查看可读结果。将日期转换回Unix时间戳:=(A1-DATE(1970,1,1))*86400。注意,Excel日期基于您的本地时区,因此结果可能因时区偏移而与UTC不同。
Unix时间戳可以是负数吗?
是的,负Unix时间戳表示1970年1月1日(Unix纪元)之前的日期。例如,-86400表示1969年12月31日(纪元前一天)。大多数编程语言完全支持负时间戳:Python的datetime.fromtimestamp(-86400)返回1969-12-31。这对历史日期很有用,尽管非常早的日期(约1901年之前)可能超出32位有符号整数的范围。
什么是 Unix 时间戳?
Unix 时间戳(也称为纪元时间或 POSIX 时间)是自 1970 年 1 月 1 日 00:00
世界协调时(UTC) 以来所经过的秒数,不含闰秒。这个起始日期称为 Unix 纪元。Unix 时间戳在计算领域被广泛使用,因为它提供了一种简单、无歧义的方式来表示某一具体时刻,与所在时区无关。如何使用本工具
时间戳转日期:
- 输入以秒(10 位数字)或毫秒(13 位数字)表示的 Unix 时间戳
- 工具会自动识别输入是秒级还是毫秒级
- 点击"现在"可填入当前时间戳
- 结果以多种格式同时显示,方便使用
日期转时间戳:
- 通过日期选择器选择日期
- 可选择性地设置具体时间
- 对应的 Unix 时间戳将同时显示秒级和毫秒级结果
输出格式
- ISO 8601 — 国际标准格式,例如
2024-01-15T10:30:00.000Z - RFC 2822 — 常用于电子邮件和 HTTP 头,例如
Mon, 15 Jan 2024 10:30:00 GMT - 本地时间 — 根据浏览器的语言区域设置格式化
- UTC — 世界协调时表示
秒级与毫秒级
Unix 时间戳常见两种单位:
- 秒(10 位数字) — 传统 Unix 格式,大多数命令行工具和服务端语言使用,例如
1700000000 - 毫秒(13 位数字) — JavaScript(
Date.now())、Java 及众多接口使用,例如1700000000000
本转换器根据输入的位数自动判断所用单位。
常见时间戳
| 时间戳 | 对应日期 |
|---|---|
0 | 1970 年 1 月 1 日 00:00 UTC(Unix 纪元) |
1000000000 | 2001 年 9 月 9 日 01:46 UTC |
1700000000 | 2023 年 11 月 14 日 22:13 UTC |
2000000000 | 2033 年 5 月 18 日 03:33 UTC |
2147483647 | 2038 年 1 月 19 日 03:14 UTC(Y2K38 问题) |
使用场景
- 调试返回时间戳的接口响应
- 将日志文件中的时间戳转换为可读日期
- 配置定时任务(计划任务)时使用具体时间戳
- 操作以 Unix 时间戳存储日期的数据库
- 无歧义地跨时区比较时间
各编程语言中的 Unix 时间戳
以下示例展示了如何在常用编程语言中获取当前 Unix 时间戳,以及如何将时间戳转换为日期。
Python
import time
import datetime
# 获取当前 Unix 时间戳
timestamp = int(time.time())
# 将时间戳转换为日期
dt = datetime.datetime.fromtimestamp(timestamp)
print(dt) # 例如:2026-03-20 12:00:00
JavaScript
// 获取当前 Unix 时间戳(秒)
const timestamp = Math.floor(Date.now() / 1000);
// 将时间戳转换为日期
const date = new Date(timestamp * 1000);
console.log(date.toISOString());
PHP
// 获取当前 Unix 时间戳
$timestamp = time();
// 将时间戳转换为日期
echo date('Y-m-d H:i:s', $timestamp);
Java
import java.time.Instant;
import java.time.ZoneId;
import java.time.LocalDateTime;
// 获取当前 Unix 时间戳
long timestamp = System.currentTimeMillis() / 1000;
// 将时间戳转换为日期
LocalDateTime dt = Instant.ofEpochSecond(timestamp)
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
SQL(MySQL)
-- 获取当前 Unix 时间戳
SELECT UNIX_TIMESTAMP();
-- 将时间戳转换为日期
SELECT FROM_UNIXTIME(1710936000);
-- 结果:'2024-03-20 12:00:00'
Go
package main
import (
"fmt"
"time"
)
// 获取当前 Unix 时间戳
ts := time.Now().Unix()
// 将时间戳转换为日期
t := time.Unix(ts, 0)
fmt.Println(t.Format("2006-01-02 15:04:05"))
Bash
# 获取当前 Unix 时间戳
date +%s
# 将时间戳转换为日期(Linux)
date -d @1710936000
# 将时间戳转换为日期(macOS)
date -r 1710936000
Unix 时间戳常用数值
供开发者参考的重要时间戳速查表:
| 日期 | Unix 时间戳(秒) |
|---|---|
| 1970 年 1 月 1 日(Unix 纪元) | 0 |
| 2000 年 1 月 1 日(Y2K) | 946684800 |
| 2001 年 9 月 9 日(10 亿整) | 1000000000 |
| 2025 年 1 月 1 日 | 1735689600 |
| 2026 年 1 月 1 日 | 1767225600 |
| 2027 年 1 月 1 日 | 1798761600 |
| 2286 年 11 月 20 日(100 亿整) | 10000000000 |
| 2038 年 1 月 19 日(Y2K38 溢出) | 2147483647 |
2038 年问题(Y2K38)
2038 年问题(Y2K38)是一种计算局限性,根源在于将 Unix 时间戳以 32 位有符号整数存储。32 位有符号整数的最大值为 2,147,483,647,对应的时刻是 2038 年 1 月 19 日 03:14
UTC。超过此刻的一秒,整数溢出后变为负数,会被解读为 1901 年 12 月的某个日期。这一问题与千禧年之交影响众多系统的"千年虫"(Y2K)类似。然而,Y2K38 的潜在影响可能更大,因为 Unix 时间戳已深度嵌入操作系统、文件系统、数据库和网络协议之中。
现代系统大多通过采用 64 位时间戳来规避这一问题。64 位有符号整数可表示约 2920 亿年后的日期,从根本上消除了溢出风险。目前大多数现代 Linux 内核、macOS 和 Windows 版本已在内部使用 64 位时间,但老旧嵌入式系统、早期数据库及部分文件格式仍可能存在风险。