🕐 Unix时间戳转换工具

广告位 - 顶部 (728×90)
当前 Unix 时间戳(实时更新)

时间戳 → 日期时间

提示输入时间戳后自动转换

日期时间 → 时间戳

提示选择日期时间后自动转换

常用时间戳快捷

点击获取常用时间点的时间戳(本地时区):

提示点击上方按钮获取时间戳

相对时间计算

相对时间输入时间戳后显示

快捷偏移计算(基于当前时间):

提示点击上方按钮计算

批量时间戳转换

每行输入一个时间戳(自动识别秒/毫秒):

批量转换结果

结果将显示在这里...
广告位 - 中部 (728×90)

Unix 时间戳知识

什么是 Unix 时间戳

Unix 时间戳(Unix Timestamp)是从协调世界时(UTC)1970年1月1日00:00:00 起到指定时刻所经过的秒数(或毫秒数)。它是一种跨平台、跨编程语言统一的时间表示方式,不依赖任何时区,因此在数据库存储、API 接口通信、日志记录、缓存过期等场景中被广泛使用。

秒级时间戳为 10 位数字(如 1700000000),毫秒级时间戳为 13 位数字(如 1700000000000)。JavaScript 的 Date.now() 默认返回毫秒级,而 C 语言的 time()、PHP 的 time() 返回秒级。

时间戳的起源:1970年1月1日

Unix 时间戳的起点 1970-01-01 00:00:00 UTC 被称为 Unix 纪元(Unix Epoch)。这一约定源于 Unix 操作系统早期的开发(约 1969-1971 年间)。据 Unix 之父 Dennis Ritchie 和 Ken Thompson 回忆,当时选择 1970 年作为起点,是因为它是一个简洁的"整十年",方便人工估算。从此,Unix 系统及衍生系统(Linux、macOS、BSD 等)均以这一时刻作为时间计算的基准。

2038年问题(Y2K38)

在 32 位系统中,Unix 时间戳通常使用 32 位有符号整数(int32_t)存储,其最大值为 2147483647,对应 2038年1月19日 03:14:07 UTC。在此时刻之后,整数将发生溢出,时间戳变为负数,系统可能将时间"回拨"到 1901 年,导致软件故障——这就是著名的 2038年问题(也称 Y2K38 问题)。

解决方法是使用 64 位时间戳(int64_ttime_t 在 64 位系统上)。64 位时间戳可表示约 2920 亿年的时间范围,足以满足所有实际需求。现代 64 位操作系统和大部分主流编程语言已迁移至 64 位时间戳,但部分嵌入式系统和遗留系统仍需关注此问题。

常见编程语言获取时间戳的方法

语言秒级时间戳毫秒级时间戳
JavaScriptMath.floor(Date.now()/1000)Date.now()
Pythonint(time.time())int(time.time()*1000)
JavaInstant.now().getEpochSecond()System.currentTimeMillis()
PHPtime()intval(microtime(true)*1000)
Gotime.Now().Unix()time.Now().UnixMilli()
C/C++time(NULL)需自行实现或用 clock_gettime
RubyTime.now.to_iTime.now.to_i * 1000
SwiftInt(Date().timeIntervalSince1970)Int(Date().timeIntervalSince1970 * 1000)
SQL (MySQL)UNIX_TIMESTAMP()UNIX_TIMESTAMP(NOW(3))*1000
Shell (Bash)date +%sdate +%s%3N

时间戳使用场景

使用教程

本时间戳转换工具支持秒级和毫秒级时间戳的互相转换,以下是详细的使用方法:

时间戳转日期时间:在「时间戳」输入框中输入Unix时间戳(支持10位秒级和13位毫秒级格式,工具会自动识别),选择目标时区(UTC、本地时区或自定义时区),工具会立即转换为标准日期时间格式(YYYY-MM-DD HH:mm:ss),并显示星期几、ISO 8601格式和相对时间描述(如「3小时前」)。

日期时间转时间戳:切换到「日期转时间戳」模式,在日期选择器中选择目标日期时间,工具会自动计算对应的秒级和毫秒级时间戳。你也可以手动输入符合ISO 8601标准的日期字符串(如2024-01-15T08:30:00Z),工具同样会正确解析。

批量转换与时区切换:工具支持批量输入多个时间戳(每行一个),一次性转换所有结果。时区切换功能支持全球主要时区选择,方便跨国团队协作时统一时间标准。转换结果支持一键复制,方便粘贴到日志文件或数据库查询中使用。

应用场景

Unix时间戳是计算机系统中时间表示的通用语言,以下是几个核心的应用场景:

数据库设计与开发:在MySQL、PostgreSQL、MongoDB等数据库中,使用Unix时间戳存储创建时间、更新时间和过期时间是最常见的做法。相比字符串格式的日期,整数时间戳占用空间更小、排序更快、跨时区一致性更好。开发者在编写SQL查询或ORM代码时,经常需要在时间戳和人类可读日期之间转换。

API接口调试:RESTful API通常使用Unix时间戳传递时间参数(如?from=1700000000&to=1700086400)。后端返回的数据中也常以时间戳形式呈现。前端开发者需要使用本工具将这些时间戳转换为本地日期时间,以便正确展示给用户。

服务器日志分析:Linux系统日志、Nginx/Apache访问日志、应用错误日志中记录的时间通常是Unix时间戳格式。运维人员在进行故障排查时,需要将这些时间戳转换为可读的日期时间,以确定事件发生的具体时刻和先后顺序。

扩展知识

Unix纪元与时间戳起源:Unix时间戳从1970年1月1日00:00:00 UTC(称为Unix Epoch)开始计算,这一设定源于早期Unix操作系统的设计。选择1970年是因为当时32位整数足以覆盖未来数十年的时间范围。然而,32位有符号整数的最大值为2,147,483,647,对应2038年1月19日03:14:07 UTC,这就是著名的「2038年问题」(Y2K38)。现代系统已普遍采用64位整数存储时间戳,可覆盖约2920亿年。

UTC、GMT与本地时间:UTC(协调世界时)是目前全球通用的时间标准,基于原子钟,精度极高。GMT(格林尼治标准时间)是基于天文观测的时间,现已基本被UTC取代。本地时间是根据所在时区对UTC进行偏移后的结果。中国在东八区(UTC+8),因此北京时间比UTC快8小时。本工具支持UTC、本地时区和自定义时区三种模式切换。

闰秒与时钟同步:由于地球自转速度不均匀,国际地球自转服务组织(IERS)会不定期宣布插入「闰秒」来保持UTC与地球自转的同步。闰秒的插入会导致某些分钟内出现61秒。虽然大多数开发者无需关心闰秒,但在设计高精度定时系统(如金融交易、卫星导航)时,必须考虑闰秒对时间计算的影响。

常见问题 FAQ

什么是Unix时间戳?

Unix时间戳是从1970年1月1日00:00:00 UTC(Unix纪元)开始所经过的秒数(或毫秒数)。它是跨平台、跨语言统一的时间表示方式,广泛用于数据库存储、API通信、日志记录等场景。

Unix时间戳从哪一年开始计算?

Unix时间戳从1970年1月1日00:00:00 UTC开始计算,这一天被称为Unix纪元(Unix Epoch)。32位有符号整数能表示的最大时间戳为2147483647,对应2038年1月19日03:14:07 UTC。

什么是2038年问题(Y2K38)?

2038年问题是指使用32位有符号整数存储Unix时间戳的系统,在2038年1月19日03:14:07 UTC之后会发生整数溢出,导致时间回到1901年。解决方法是使用64位时间戳,现代64位系统已不受此问题影响。

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

秒级时间戳是10位数字(如1700000000),毫秒级时间戳是13位数字(如1700000000000)。JavaScript的Date.now()和getTime()返回毫秒级,而Linux的time()和PHP的time()返回秒级。本工具自动识别并支持两种格式。

时间戳有时区吗?

Unix时间戳本身没有时区概念,它始终基于UTC。同一个时间戳在全世界任何地方都是相同的值。时区只影响时间戳转换为人类可读日期时间时的显示结果。本工具支持UTC、本地时区和自定义时区切换。

如何在JavaScript中获取当前时间戳?

JavaScript中获取毫秒级时间戳用Date.now(),获取秒级时间戳用Math.floor(Date.now()/1000)。也可以用new Date().getTime()或Date.parse(dateString)获取特定时间的时间戳。

广告位 - 底部 (728×90)