Unix 时间戳转换

时间戳是从 1970-01-01 00:00:00 UTC 起算的秒数(或毫秒数)。它永远不带时区, 时区是转换时加上去的——所有「时间差 8 小时」「差一天」的问题都出在这里。

方法 1:浏览器本地转换

时间戳转换工具:双向转换,同时显示秒/毫秒/本地时间/UTC, 纯本地计算。

转换时间戳 →

方法 2:命令行

# Linux / Mac
date -d @1794290018
date -d @1794290018 +"%Y-%m-%d %H:%M:%S %Z"

# 毫秒要除以 1000
date -d @$((1794290018919/1000))

# Windows PowerShell
[DateTimeOffset]::FromUnixTimeSeconds(1794290018).ToLocalTime()
[DateTimeOffset]::FromUnixTimeMilliseconds(1794290018919).ToLocalTime()

方法 3:代码里

# Python
from datetime import datetime, timezone
datetime.fromtimestamp(1794290018, tz=timezone.utc)
datetime.now(timezone.utc).timestamp()

# JavaScript(毫秒!)
new Date(1794290018919).toISOString()
Date.now()

三个最常见的坑

和日志的关系

看 nginx 访问日志时,时间戳的时区决定了你判断「攻击发生在几点」是否正确。 日志里的 +0800 是本地时间,转成 UTC 再和服务器上的其他日志对齐,才不会得出错误结论。