我正在尝试将字符串解析为具有用户特定时区位置的时间-
// error handling skipped for brevity
loc, _ := time.LoadLocation("Asia/Kolkata")
now, _ := time.ParseInLocation("15:04", "10:10", loc)
fmt.Println("Location : ", loc, " Time : ", now)
我在系统上得到的输出是-Location : Asia/Kolkata Time : 0000-01-01 10:10:00 +0553 HMT
这个HMT
时区是哪里来的?
如果不是解析时间,而是使用now := time.Now().In(loc)
,则打印的时区是正确的-IST
。我在进行时区解析时是否做错了事,或者我的系统时区数据库有问题?
答案 0 :(得分:2)
这可能是因为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应该正确使用。