自 Golang 纳秒时间戳以来的时间

14

Q1. 我如何从一个纳秒级的时间戳创建一个golang time结构体?

Q2. 然后我如何计算自那个时间戳开始的小时数?

2个回答

21
在Go中,“时间”对象由结构类型time.Time的值表示。
您可以使用time.Unix(sec int64, nsec int64)函数从纳秒时间戳创建Time,其中可以传递nsec超出范围[0, 999999999]
而且,您可以使用time.Since(t Time)函数,它返回自指定时间以来经过的时间作为time.Duration(基本上是以纳秒为单位的时间差)。
t := time.Unix(0, yourTimestamp)
elapsed := time.Since(t)

要获取经过的时间(以小时为单位),只需使用 Duration.Hours() 方法,它会返回一个浮点数表示经过的小时数:
fmt.Printf("Elapsed time: %.2f hours", elapsed.Hours())

尝试在Go Playground上运行它。
注意: Duration可以智能地以"72h3m0.5s"的格式进行格式化,实现在其String()方法中:
fmt.Printf("Elapsed time: %s", elapsed)

1
为了避免搜索,max time.UnixNano() 是:2262-04-11 23:47:16.854775807 +0000 UTC - Highstead

5
你需要将纳秒传递给time.Unix(0, ts),例如:
func main() {
    now := time.Now()
    ts := int64(1257856852039812612)
    timeFromTS := time.Unix(0, ts)
    diff := now.Sub(timeFromTS)
    fmt.Printf("now: %v\ntime from ts: %v\ndiff: %v\ndiff int:", now, timeFromTS, diff, int64(diff))
}

playground


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接