本文介绍如何使用 go 的 time 包将纳秒级时间戳转换为 time.time 类型,并准确计算其距当前时刻的小时数,涵盖核心 api 用法、精度处理及实用格式化技巧。
在 Go 中,time.Time 是表示时间的核心结构体,而纳秒级时间戳(即自 Unix 纪元 1970-01-01 00:00:00 UTC 起经过的纳秒数)可通过 time.Unix(sec, nsec) 函数直接构造为 time.Time 值。关键在于:Unix() 函数允许 nsec 参数超出 [0, 999999999] 范围——Go 会自动进位/借位处理秒与纳秒的换算,因此可安全传入纯纳秒值(如 1672531200000000000),只需设 sec = 0 即可:
package main
import (
"fmt"
"time"
)
func main() {
// 示例:一个纳秒时间戳(对应 2025-01-01 00:00:00 UTC)
nanos := int64(1672531200000000000)
// 构造 time.Time:sec=0,nsec=nanos
t := time.Unix(0, nanos)
// 计算距今经过的时间(Duration,单位为纳秒)
elapsed := time.Since(t)
// 转换为小时(返回 float64,含小数部分)
hours := elapsed.Hours()
fmt.Printf("Elapsed time: %.2f hours\n", hours)
// 或使用智能字符串格式(如 "48h2m15.3s")
fmt.Printf("Elapsed time: %s\n", elapsed)
}⚠️ 注意事项:
综上,从纳秒时间戳获取“距今小时数”仅需两步:time.Unix(0, ns) 构建时
