时间戳转换:10位、13位 Unix 时间戳转日期

支持时间戳转时间、日期转时间戳,以及 UTC 与北京时间(UTC+8)互转;10 位按秒、13 位按毫秒识别。

时间戳 → 日期
日期 → 时间戳
一天后 一周后

时间戳转时间:10 位秒级与 13 位毫秒级

Unix 时间戳从 1970 年 1 月 1 日 00:00:00 UTC 起计时。使用 time.Unix 可以将时间戳转换为时间类型;转换为可读日期时需要明确时区。此页支持常见的北京时间 UTC+8 与协调世界时 UTC+0。

package main

import (
	"fmt"
	"time"
)

func main() {
	unixTime := time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC)
	fmt.Println(unixTime.Unix())
	t := time.Unix(unixTime.Unix(), 0).UTC()
	fmt.Println(t)

}

时间戳转北京时间与 UTC

时区默认使用本地时间,也就是服务器配置的时区,也可以通过 FixedZone 来指定时区进行转换。通过time.Format方法转换成可读字符串,新版本Go引入了 DateOnlyTimeOnly 两个格式类型,好评👍。

package main

import (
	"fmt"
	"time"
)

func main() {
	loc := time.FixedZone("UTC+8", 8*60*60)
	t := time.Date(2009, time.November, 10, 23, 0, 0, 0, loc)
	fmt.Println("The time is:", t.Format(time.RFC822))
}

Hive SQL用法

-- 1. 秒级时间戳转字符串
SELECT from_unixtime(1709614110, 'yyyy-MM-dd HH:mm:ss') AS time_str;
-- 结果:2024-03-05 14:08:30

-- 2. 毫秒级时间戳转字符串(先除以1000取整)
SELECT from_unixtime(cast(1709614110123 / 1000 AS BIGINT), 'yyyy-MM-dd HH:mm:ss') AS time_str;
-- 结果:2024-03-05 14:08:30

Excel 用法

=TEXT((A2/86400000 + 8/24) + DATE(1970,1,1), "yyyy-mm-dd hh:mm:ss")

常见问题

10 位和 13 位时间戳有什么区别?
10 位通常表示秒,例如 1700000000;13 位通常表示毫秒,例如 1700000000000
为什么转换后的时间相差 8 小时?
时间戳本身以 UTC 为基准。查看北京时间时请选择 UTC+8;存储和接口传输通常建议统一使用 UTC。
可以一次转换多条时间戳吗?
可以,点击上方“批量转换”,每行输入一个 10 位或 13 位时间戳即可导出结果。

Feedback