猿问

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

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


// 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。我的时区解析有问题还是我的系统时区数据库有问题?


慕村225694
浏览 107回答 1
1回答

呼啦一阵风

now这可能是您的年份为 0000 而time.Now()返回当前时间这一事实的遗留问题。时区很奇怪,某些地方并不总是使用相同的时区。这是IANA 时区数据库的摘录:# 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 都应该正确使用。
随时随地看视频慕课网APP

相关分类

Go
我要回答