我有一个关于比较 Golang 时间的问题

问题描述 投票:0回答:1
startAt, _ := time.Parse(time.DateTime, "2023-10-14 15:49:53")
endAt, _ := time.Parse(time.DateTime, "2024-10-14 15:49:53")

timeNow := time.Now()
fmt.Println(timeNow)                //2023-10-14 21:38:42
fmt.Println(startAt.After(timeNow)) // result is true, but is not true
fmt.Println(timeNow.After(endAt))   // false

if startAt.After(timeNow) || timeNow.After(endAt) {
    fmt.Println("ok!")
}

使用time.ParseInLocation就成功了!

go time equality
1个回答
0
投票

您的结果是由于默认时区行为的差异造成的。

    如果输入字符串中没有其他时区信息,
  • time.Parse
    将默认使用 UTC。

  • time.Now
    使用当地时区。

如果您想将输入字符串解析为当地时间,请使用

time.ParseInLocation
,并传递
time.Local
作为位置:

startAt, _ := time.ParseInLocation(time.DateTime, "2023-10-14 15:49:53", time.Local)
endAt, _ := time.ParseInLocation(time.DateTime, "2024-10-14 15:49:53", time.Local)

如果您想获取当前的 UTC 时间,您可以使用:

time.Now().UTC()

© www.soinside.com 2019 - 2024. All rights reserved.