【问题标题】:golang time.Now().Unix() discrepancy between documentation and implementation?golang time.Now().Unix() 文档和实现之间的差异?
【发布时间】:2016-04-12 22:23:19
【问题描述】:

https://golang.org/pkg/time/#Unix

声明这个函数的签名是

func Unix(sec int64, nsec int64) Time

意思是,它返回一个Time对象。

但以下程序中止并显示错误消息:

14: 不能使用 now.Unix() (type int64) 作为类型 time.Time in assignment`

func main() {
    var now time.Time
    now = time.Now()
    fmt.Println(now)

    var secs time.Time
    secs = now.Unix()
    fmt.Println(secs)
}

以下版本的程序产生输出

func main() {
    var now time.Time
    now = time.Now()
    fmt.Println(now)

    // var secs time.Time
    secs := now.Unix()
    fmt.Println(secs)
}

2016-04-12 18:20:22.566965512 -0400 EDT

1460499622

这只是文档中的错误问题吗?

【问题讨论】:

    标签: go time


    【解决方案1】:

    文档是正确的,您查看的是错误版本的 Unix。您使用的方法是这样的; https://golang.org/pkg/time/#Time.Unix 它不带参数,在时间对象上调用,并将 unix 时间作为 int64 返回。你引用的版本有两个参数,int64,秒和纳秒? (不是肯定的,这就是 nseconds 所代表的),它表示 unix 格式的时间,它返回一个 time.Time

    所以扩展你的第二个例子;

    func main() {
        var now time.Time
        now = time.Now()
        fmt.Println(now)
    
        // var secs time.Time
        secs := now.Unix()
        fmt.Println(secs)
        t := time.Unix(secs, 0) // get a time from the seconds value which is a unix time
        fmt.Println(t)
    }
    

    这是上面添加的另一行以打印secs 的类型。 https://play.golang.org/p/KksPPbQ1Jy

    【讨论】:

    • time.Unix 函数中的 nsec 是纳秒级。您可以以秒、纳秒或两者的组合指定时间戳。
    • 感谢您的澄清!这些函数在某种意义上是互为倒数的。秒 时间对象转换器。
    猜你喜欢
    • 2016-03-29
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 2013-08-06
    • 2019-03-22
    • 2021-11-07
    相关资源
    最近更新 更多