在Go语言中,time.Time的“零”值是什么?

272
在错误情况下,我尝试返回nil,这会抛出错误:
cannot use nil as type time.Time in return argument

time.Timezero 值是什么?


55
你可以使用 IsZero() 来检测时间是否为零。 - Matt
1
通常情况下,当我想返回 nil 以表明没有设置任何值时,我会在函数签名中使用指针作为返回值。 - bio
4个回答

441
你应该使用Time.IsZero()函数:time#Time.IsZero
func (Time) IsZero

或者

func (t Time) IsZero() bool

IsZero函数用于判断t是否表示为零时间点,即公元1年1月1日00:00:00 UTC。


1
实际上,如果要比较给定的时间值是否为空,应该使用这个。 - Gaurav Ojha
40
虽然这是正确的比较答案,但问题提问者并未询问比较,而是如何初始化零值。被采纳的回答是正确的。 - mikijov

291

创建一个空的time.Time结构体字面量会返回Go语言的零日期。因此,对于下面的打印语句:

fmt.Println(time.Time{})

输出结果为:

0001-01-01 00:00:00 +0000 UTC
为了完整起见,官方文档明确说明:

类型Time的零值是UTC时间下的公元1年1月1日00:00:00.000000000。

返回结果:The zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.

10
"Passing no arguments"听起来像是一个函数调用。实际上这是一个没有指定任何字段的结构体字面量。对于任何结构体X而言,X{}都是其零值。 - Russ Cox
1
@RussCox 我不认为这是正确的。在我的情况下,我在结构体中有一个 time.Time 字段,它带有 'omitempty' 属性。如果我不设置该值,它会自动设置为 0001-01-01 00:00:00 +0000 UTC 而不是被忽略。 - Gaurav Ojha
1
@GauravOjha 请参考Golang JSON omitempty With time.Time Field - icza
1
马蒂!我们必须回去! - qciccoretti

7

3

在Go v1.18上测试通过

time.Time 的默认值为:

0001-01-01 00:00:00 +0000 UTC

使用IsZero()函数进行检查是一种简洁的方式。

var zeroTime time.Time

if zeroTime.IsZero() {
    // do something when zero
}


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