【问题标题】:Time since golang nanosecond timestamp自 golang 纳秒时间戳以来的时间
【发布时间】:2015-02-27 00:59:52
【问题描述】:

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

Q2。然后我如何计算自该时间戳以来的小时数?

【问题讨论】:

    标签: go time


    【解决方案1】:

    在 Go 中,“时间”对象由结构类型 time.Time 的值表示。

    您可以使用time.Unix(sec int64, nsec int64) 函数从纳秒时间戳创建Time,其中在[0, 999999999] 范围之外传递nsec 是有效的。

    您可以使用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)
    

    【讨论】:

    • 为了节省一些谷歌搜索,max time.UnixNano() 是:2262-04-11 23:47:16.854775807 +0000 UTC
    【解决方案2】:

    您将纳秒传递给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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 2011-07-08
      • 1970-01-01
      • 2015-01-28
      相关资源
      最近更新 更多