当前时间详细信息
| Unix 时间戳(秒) | - |
|---|---|
| Unix 时间戳(毫秒) | - |
| UTC 时间 | - |
| 本地时间 | - |
| ISO 8601 格式 | - |
各编程语言获取当前时间戳
JavaScript
// 秒级时间戳
const timestamp = Math.floor(Date.now() / 1000);
console.log(timestamp);
// 毫秒级时间戳
const timestampMs = Date.now();
console.log(timestampMs);
Python
import time
# 秒级时间戳
timestamp = int(time.time())
print(timestamp)
# 毫秒级时间戳
timestamp_ms = int(time.time() * 1000)
print(timestamp_ms)
PHP
// 秒级时间戳
$timestamp = time();
echo $timestamp;
// 毫秒级时间戳
$timestampMs = round(microtime(true) * 1000);
echo $timestampMs;
Go
package main
import (
"fmt"
"time"
)
func main() {
// 秒级时间戳
timestamp := time.Now().Unix()
fmt.Println(timestamp)
// 毫秒级时间戳
timestampMs := time.Now().UnixMilli()
fmt.Println(timestampMs)
}
Java
// 秒级时间戳
long timestamp = System.currentTimeMillis() / 1000;
System.out.println(timestamp);
// 毫秒级时间戳
long timestampMs = System.currentTimeMillis();
System.out.println(timestampMs);
// Java 8+ Instant
import java.time.Instant;
long epochSecond = Instant.now().getEpochSecond();
System.out.println(epochSecond);
MySQL
-- 获取当前的 Unix 时间戳(秒)
SELECT UNIX_TIMESTAMP();
-- 获取指定日期的时间戳
SELECT UNIX_TIMESTAMP('2025-01-01 00:00:00');
-- 时间戳转换为日期时间
SELECT FROM_UNIXTIME(1735689600);
什么是 Unix 时间戳?
Unix 时间戳(Unix Timestamp)是一种用来追踪时间的方式,它表示从 1970 年 1 月 1 日 00:00:00 UTC(又称为 Unix 纪元,Unix Epoch)到指定时刻之间所经过的秒数。这个数值是一个不断递增的整数,不受时区影响,因此在全球各地的计算机系统中广泛使用。
Unix 纪元的起源
Unix 纪元起始于 1970 年 1 月 1 日 00:00:00 UTC。这个时间点被选为计算的起始零点,在此之前的时间会以负数表示。例如,1969 年 12 月 31 日 23:59:59 UTC 对应的时间戳为 -1。
秒级与毫秒级时间戳
标准的 Unix 时间戳为秒级,通常是一个 10 位数字(例如 1700000000)。但在某些编程语言和系统中(如 JavaScript),使用的是毫秒级时间戳,即 13 位数字(例如 1700000000000)。两者之间的换算很简单:毫秒级 = 秒级 × 1000。
时间戳的优势
- 与时区无关:全球任何位置在同一瞬间的 Unix 时间戳都相同,便于跨时区的系统通信与数据同步。
- 易于比较与运算:作为纯数字,可以直接进行大小比较、加减运算,计算时间间隔非常方便。
- 存储效率高:仅需一个整数即可表示精确时间,在数据库中占用空间小。
- 跨平台通用:几乎所有编程语言和操作系统都原生支持 Unix 时间戳的处理。
常见问题 FAQ
什么是 Unix 纪元(Epoch)?
Unix 纪元是指 1970 年 1 月 1 日 00:00:00 UTC 这个时间点。所有的 Unix 时间戳都是以此为基准,计算自该时刻起所经过的秒数。之所以选择这个时间点,是因为 Unix 操作系统在 1970 年代初期开发时,工程师们选定了一个便于计算的近期整数时间作为起点。在 Unix 纪元之前的时间,其时间戳为负数。
当前的时间戳大约是多少位数?
当前(2025-2026 年)的 Unix 时间戳为 10 位数字,大约在 17 亿左右(例如 1742500000)。秒级时间戳自 2001 年 9 月 9 日起进入 10 位数,预计到 2286 年 11 月 20 日才会达到 11 位数(10,000,000,000)。如果是毫秒级时间戳,则为 13 位数字。
为什么 JavaScript 的时间戳是 13 位?
JavaScript 的 Date.now() 和 new Date().getTime() 返回的是毫秒级时间戳(13 位数字),而不是传统的秒级时间戳(10 位)。这是因为 JavaScript 的 Date 对象设计时就以毫秒为最小单位,以提供更高的精度。若需要秒级时间戳,只需除以 1000 并取整:Math.floor(Date.now() / 1000)。
2038 年问题是什么?
许多较旧的计算机系统使用 32 位有符号整数来存储 Unix 时间戳,其最大值为 2,147,483,647,对应的时间为 2038 年 1 月 19 日 03:14:07 UTC。超过此时间后,32 位整数将发生溢出,可能导致时间被错误地解读为 1901 年的日期,进而引发系统故障。这被称为「Y2K38 问题」或「Unix 千年虫」。现代系统已逐步迁移至 64 位时间戳,可以表示到数千亿年后的时间,彻底解决此问题。