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

标签 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)

我在系统上得到的输出是 - 位置:亚洲/加尔各答时间: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/

相关文章:

go - 如何使用 Go 客户端 API 在 kubernetes 中创建和使用卷?

php - 混淆了 JavaScript 和 PHP 的时区

go - 从 Go 调用 so 文件中的函数

sql - 更快的 sqlite3 查询?我需要尽快处理 100 万行

java - 通过时区偏移量获取TimeZone

javascript - 时区转换

java - java 8 中澳大利亚/墨尔本时区的日期时间日光节约问题

java - joda time做时间转换 'too soon'

file-upload - 使用 Content-Type multipart/form-data POST 数据

go - 附加两个数组的通用函数