golang 时间戳转换为时区同义词给出不同的结果

golang timestamp conversion give different result for timezone synonyms

我知道Moscow Time set to UTC+03:00 因此,时区 Europe/MoscowEtc/GMT+3 必须相同

但不是

msk, _ := time.LoadLocation("Europe/Moscow")
gmt3, _ := time.LoadLocation("Etc/GMT+3")
fmt.Println("MSK", now.In(msk).Format(isoFmt))
fmt.Println("GMT+3", now.In(gmt3).Format(isoFmt))

Check 你自己。我做错了什么?

play 为 isoFmt=time.RFC3339

给出了一个非常奇怪的结果
MSK 2009-11-11T02:00:00+03:00
GMT+3 2009-11-10T20:00:00-03:00

这两个时区实际上不是同义词。根据 list of timezones, Europe/Moscow has UTC offset of +03:00, while Etc/GMT+3 has UTC offset of −03:00. Etc/GMT+3 实际上位于南美某处和其他一些位置。

所以 Go 没有任何问题(在这个特定的例子中),但是你混淆的根源很清楚。