gpt4 book ai didi

go - 为什么用户定义的时间位置为零

转载 作者:行者123 更新时间:2023-12-01 21:16:07 24 4
gpt4 key购买 nike

我正在使用go 1.13,我有一个用户定义的类型time.Time类型,当使用给定位置的UTC创建该值时,loc属性仍然是nil(设置为nil loc会导致某些时间函数出现 panic ,所以这是不能接受的)。游乐场here

type CustomTime time.Time

func main() {
t := CustomTime(time.Date(2020, time.July, 23, 1, 0, 0, 0, time.UTC))
fmt.Printf("%+v",t) // prints {wall:0 ext:63731062800 loc:<nil>}
}
仅供引用:背景信息,我正在使用此自定义时间为我的数据库处理程序实现 Scan(),当我比较上面定义的自定义时间值(具有 nil位置与db中的值(非 nil位置)时,我的测试是由于比较失败而导致失败,请多多指教。

最佳答案

如果您查看文档,则time.Time属于类型

type Time struct {
//...
wall uint64
ext int64

// loc specifies the Location that should be used to
// determine the minute, hour, month, day, and year
// that correspond to this Time.
// The nil location means UTC.
// All UTC times are represented with loc==nil, never loc==&utcLoc.
loc *Location
}
nil loc实际上表示UTC。您可以通过打印相等性来验证相同性
fmt.Println(time.UTC == time.Time(t).Location())

// Output: true
当您打印 t时会看到一个nil,因为您实际上是在打印struct Time而不使用它的默认 Stringer,因为您已经用“自定义类型”即 CustomTime包装了它。因此, loc字段将为nil。
fmt.Printf("%+v", time.Time(t))
// This will print UTC for the location.
如果您想在各处使用 CustomTime,则无需创建类型别名,而可以将 time.Time嵌入结构中,以便 CustomTime的行为类似于 time.Time
type CustomTime struct {
time.Time
}

func main() {
t := CustomTime{time.Date(2020, time.July, 23, 1, 0, 0, 0, time.UTC)}
fmt.Printf("%+v", t) // Prints: 2020-07-23 01:00:00 +0000 UTC
}

关于go - 为什么用户定义的时间位置为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63067760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com