我正在尝试使用用户特定的时区位置将字符串解析为时间 -
// error handling skipped for brevity
loc, _ := time.LoadLocation("Asia/Kolkata")
now, _ := time.ParseInLocation("15:04", "10:10", loc)
fmt.Println("Location : ", loc, " Time : ", now)
我在系统上得到的输出是 - 位置:亚洲/加尔各答时间:0000-01-01 10:10:00 +0553 HMT
这个 HMT
时区从何而来?
如果我不使用 now := time.Now().In(loc)
来解析时间,则打印的时区是正确的 - IST
。我的时区解析有问题吗还是我的系统时区数据库有问题?
最佳答案
这可能是因为 now
的年份是 0000,而 time.Now()
返回当前时间。时区很奇怪,某些位置并不总是使用相同的时区。这是 IANA Time Zone Database 的摘录:
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Kolkata 5:53:28 - LMT 1854 Jun 28 # Kolkata
5:53:20 - HMT 1870 # Howrah Mean Time?
5:21:10 - MMT 1906 Jan 1 # Madras local time
5:30 - IST 1941 Oct
5:30 1:00 +0630 1942 May 15
5:30 - IST 1942 Sep
5:30 1:00 +0630 1945 Oct 15
5:30 - IST
如果我的解释正确的话,HMT 似乎是从 1854 年一直使用到 1870 年——我不太清楚为什么这会导致它被用于 0000 年,这似乎属于 LMT,但有可能Go 数据库略有不同(或者我可能误解了数据库)。如果您担心历史日期使用的正确时区(例如 0000),我不确定我能否给出一个很好的答案,但是对于任何最近的 IST 都应该正确使用。
关于go - 为什么用 ParseInLocation 打印不同的时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53037318/