gpt4 book ai didi

datetime - 走时比较

转载 作者:IT王子 更新时间:2023-10-29 01:34:49 25 4
gpt4 key购买 nike

我正在尝试创建简单的函数来将一个时间的时区更改为另一个时间(让我们假设 UTC 为 +0700 WIB)。 Here是源代码。我有 2 个函数,第一个是 GenerateWIB,它会将您的时区更改为具有相同日期时间的 +0700 WIB。其次是 GenerateUTC,它将给定时间的时区更改为 UTCGenerateUTC 完美运行,而另一个则不然。

expect := time.Date(2016, 12, 12, 1, 2, 3, 4, wib)
t1 := time.Date(2016, 12, 12, 1, 2, 3, 4, time.UTC)
res := GenerateWIB(t1)
if res != expect {
fmt.Printf("WIB Expect %+v, but get %+v", expect, res)
}

res != expect 总是充满这个结果。

WIB Expect 2016-12-12 01:02:03.000000004 +0700 WIB, but get 2016-12-12 01:02:03.000000004 +0700 WIB

但是是同一时间对吧?我错过了什么吗?

最佳答案

有一个.Equal()比较日期的方法:

if !res.Equal(expect) {
...

引用 the doc :

Note that the Go == operator compares not just the time instant but also the Location and the monotonic clock reading. Therefore, Time values should not be used as map or database keys without first guaranteeing that the identical Location has been set for all values, which can be achieved through use of the UTC or Local method, and that the monotonic clock reading has been stripped by setting t = t.Round(0). In general, prefer t.Equal(u) to t == u, since t.Equal uses the most accurate comparison available and correctly handles the case when only one of its arguments has a monotonic clock reading.

如果您查看 time.Time 的代码(*) struct,可以看到这个struct有3个私有(private)字段:

type Time struct {
...
wall uint64
ext int64

...
loc *Location
}

关于这些字段的注释清楚地表明,根据 Time 结构的构建方式,描述同一时间点的两个 Time 可能具有不同的值字段。

运行res == expect比较这些内部字段的值,
运行 res.Equal(expect) 会尝试做你期望的事情。


(*) time/time.go 截至 2020 年 10 月 27 日在 master 分支上的源代码

关于datetime - 走时比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49550340/

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