为什么使用ParseInLocation打印不同的时区?

时间:2018-10-29 00:31:41

标签: go timezone

我正在尝试将字符串解析为具有用户特定时区位置的时间-

// 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。我在进行时区解析时是否做错了事,或者我的系统时区数据库有问题?

1 个答案:

答案 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应该正确使用。