1 回答

TA贡献1934条经验 获得超2个赞
time.Time
是一个结构。它的零值——尽管是一个有效的时间值——就像从未使用过一样。您可以利用零值时间来指示丢失或未定义的时间值。甚至有一种Time.IsZero()
方法可以告诉您某个time.Time
值是否为零值。
请注意,零值时间不是某些其他语言中的 1970 年 1 月 1 日,而是 1 年 1 月 1 日,正如您在 Go Playground上看到的那样。这也记录在time.Time
:
Time 类型的零值为 1 年 1 月 1 日 00:00:00.000000000 UTC。由于这个时间在实践中不太可能出现,IsZero 方法提供了一种简单的方法来检测未明确初始化的时间。
此外,在创建Periodical
值时,使用 keyed composite literal,您可以省略不想设置的字段,从而将它们保留为零值:
eachYear := Periodical{ Interval: interval.Years(1), StartsAt: time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC), }
请注意,您不能time.Parse()
在此复合文字中使用,因为它会返回 2 个值(atime.Time
和 an error
)。time.Date()
要么像上面的例子一样使用,要么先创建时间值(处理错误),然后只使用时间值。
判断是否EndsAt
指定:
if eachYear.EndsAt.IsZero() { fmt.Println("EndsAt is missing") }
如果您需要将已设置(非零)的时间值归零,您可以使用time.Time{}
复合文字:
eachYear.StartsAt = time.Time{}
另请注意,当编组一个time.Time
值时,即使它是零值(因为它是一个有效的时间值),即使您使用该选项,它也会被发送omitempty
。在这些情况下,您必须使用*time.Time
指针或编写自定义编组器。
- 1 回答
- 0 关注
- 100 浏览
添加回答
举报