ToolHub
View All Posts

Unix 时间戳详解:格式之间的转换

Unix 时间戳是计算中最基本的概念之一,但许多开发者和数据专业人士仍然对其感到困惑。无论你是在调试 API 响应、分析日志文件还是构建调度系统,理解 Unix 时间戳的工作原理以及如何在格式之间进行转换都是一项必备技能。

什么是 Unix 时间戳?

Unix 时间戳,也称为 epoch 时间或 POSIX 时间,是自 1970 年 1 月 1 日 00:00:00 UTC 以来经过的秒数(不包括闰秒)。这个参考点被称为 Unix 纪元。时间戳存储为单个整数,便于比较、排序和计算时间差。

例如,Unix 时间戳 1700000000 对应 2023 年 11 月 14 日 22:13:20 UTC。将时间表示为单个数字的简洁性使 Unix 时间戳成为操作系统、数据库和编程语言中时间表示的标准。

为什么使用 Unix 时间戳

常见的时间戳格式

不同的系统使用不同的时间戳格式。理解这些差异有助于你在它们之间准确转换。

格式示例使用者
Unix 秒1700000000Linux、API、数据库
Unix 毫秒1700000000000JavaScript、Java
Unix 微秒1700000000000000Python、Go
ISO 86012023-11-14T22:13:20ZREST API、JSON
RFC 2822Tue, 14 Nov 2023 22:13:20 +0000电子邮件头、HTTP

将 Unix 时间戳转换为可读日期

在 JavaScript 中

JavaScript 以毫秒表示时间戳。要将秒为单位的 Unix 时间戳转换为 JavaScript Date 对象,先乘以 1000。然后使用 toLocaleString() 或 toISOString() 等方法格式化输出。

在 Python 中

Python 的 datetime 模块提供 fromtimestamp() 方法将 Unix 时间戳转换为 datetime 对象。Python 还通过 datetime.fromtimestamp(ts, tz=timezone.utc) 方法支持微秒精度的时间戳。

在命令行中

在 Linux 和 macOS 上,date 命令可以转换时间戳。在 Linux 上使用 date -d @1700000000 或在 macOS 上使用 date -r 1700000000 从 Unix 时间戳获取可读日期。

使用在线工具

转换时间戳最快的方法是使用在线转换器。粘贴你的时间戳,工具即时显示对应的日期和时间(多种格式)。试试我们免费的时间戳转换器进行快速转换。

将日期转换为 Unix 时间戳

反向转换——将可读日期转换为 Unix 时间戳——同样重要。这在向 API 发送日期、存储用户选择的日期或调度未来事件时经常需要。

在 JavaScript 中,创建 Date 对象并调用 getTime() 获取毫秒级时间戳,然后除以 1000 得到秒。在 Python 中,使用 datetime.timestamp() 直接获取 Unix 时间戳。大多数编程语言提供类似的内置方法。

2038 年问题

使用 32 位有符号整数存储 Unix 时间戳的系统将在 2038 年 1 月 19 日 03:14:07 UTC 溢出。届时,时间戳将达到 2147483647,即 32 位有符号整数的最大值,然后翻转为负数,导致日期显示为 1901 年。

这个问题被称为 2038 年问题或 Y2K38,影响旧系统和嵌入式设备。解决方案是使用 64 位整数存储时间戳,这将可表示的范围扩展到约 2920 亿年。大多数现代操作系统、数据库和编程语言已过渡到 64 位时间戳。

开发者提示:在数据库和 API 中存储时间戳时始终使用 64 位整数。如果你使用 JavaScript,请记住 Date.getTime() 返回毫秒而非秒。与期望秒数的系统交互时除以 1000。

处理时区

Unix 时间戳始终使用 UTC,消除了时区歧义。然而,向用户显示时间戳需要转换到其本地时区。以下是关键注意事项:

常见陷阱

需要在 Unix 时间戳和可读日期之间转换?试试我们免费的时间戳转换器。

试试时间戳转换器

常见问题

什么是 Unix 纪元?

Unix 纪元是 1970 年 1 月 1 日 00:00:00 UTC。它作为所有 Unix 时间戳计算的参考点。时间戳表示自该时刻以来经过的秒数。

Unix 时间戳会用完吗?

32 位有符号整数的 Unix 时间戳将在 2038 年 1 月 19 日溢出,这被称为 2038 年问题。使用 64 位整数的系统在大约 2920 亿年内不会面临此问题。大多数现代系统已过渡到 64 位时间戳。

Unix 时间戳受时区影响吗?

不会,Unix 时间戳始终使用 UTC,不受时区影响。同一时间戳在全球代表同一时刻。时区转换仅在将时间戳显示为可读日期时发生。

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

标准 Unix 时间戳以秒为单位测量自纪元以来的时间,而 JavaScript 和一些 API 使用毫秒。毫秒时间戳是秒时间戳的 1000 倍。例如,1700000000 秒等于 1700000000000 毫秒。

闰秒会影响 Unix 时间戳吗?

从技术上讲,Unix 时间戳忽略闰秒。每一天都被视为恰好有 86400 秒。这意味着当插入闰秒时,Unix 时间可能会与 UTC 略有偏移,但在实践中这很少造成问题。