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 时间戳在计算领域被广泛使用,因为它提供了一种简单、无歧义的方式来表示某一具体时刻,与所在时区无关。

如何使用本工具

时间戳转日期:

  1. 输入以秒(10 位数字)或毫秒(13 位数字)表示的 Unix 时间戳
  2. 工具会自动识别输入是秒级还是毫秒级
  3. 点击"现在"可填入当前时间戳
  4. 结果以多种格式同时显示,方便使用

日期转时间戳:

  1. 通过日期选择器选择日期
  2. 可选择性地设置具体时间
  3. 对应的 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

本转换器根据输入的位数自动判断所用单位。

常见时间戳

时间戳对应日期
01970 年 1 月 1 日 00:00
UTC(Unix 纪元)
10000000002001 年 9 月 9 日 01:46
UTC
17000000002023 年 11 月 14 日 22:13
UTC
20000000002033 年 5 月 18 日 03:33
UTC
21474836472038 年 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 位时间,但老旧嵌入式系统、早期数据库及部分文件格式仍可能存在风险。

相关工具

相关工具