英文:
golang time.Now().Unix() discrepancy between documentation and implementation?
问题
这是一个关于Go语言中时间包的问题。根据文档,time.Unix
函数的签名是func Unix(sec int64, nsec int64) Time
,意味着它返回一个Time
对象。
但是下面的程序会中止,并显示错误信息:
>14: cannot use now.Unix() (type int64) as type 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
这只是文档中的错误吗?
英文:
https://golang.org/pkg/time/#Unix
states that the signature of this function is
func Unix(sec int64, nsec int64) Time
meaning, it returns a Time
object.
But the following program aborts with the error message:
>14: cannot use now.Unix() (type int64) as type 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)
}
The following version of the program produces output
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
Is this just a matter of error in documentation?
答案1
得分: 5
文档是正确的,你正在查看错误版本的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) // 从秒值获取一个Unix时间的时间
fmt.Println(t)
}
在上面的示例中,我添加了一行代码来打印secs
的类型。你可以在这里查看它的运行结果:https://play.golang.org/p/KksPPbQ1Jy
英文:
The docs are correct, you're looking at the wrong version of Unix
. The method you're using is this; https://golang.org/pkg/time/#Time.Unix it takes no arguments, is called on a time object and returns the unix time as an int64
. The version you're referencing takes two arguments, both int64's, the seconds and nanoseconds? (not positive that's what the nseconds stands for) which represent a time in unix format and it returns a time.Time
So to extend your second example;
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)
}
Here's the above in play with one other line added to print the type of secs
. https://play.golang.org/p/KksPPbQ1Jy
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论