【问题标题】:Why is a different timezone being printed with ParseInLocation?为什么使用 ParseInLocation 打印不同的时区?
【发布时间】:2023-03-14 05:19:01
【问题描述】:

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

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

【问题讨论】:

    标签: go timezone


    【解决方案1】:

    这可能是因为 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 都应该正确使用。

    【讨论】:

    • 啊!这是一个有趣的信息。最后,历史会产生个人影响!
    猜你喜欢
    • 1970-01-01
    • 2017-05-11
    • 2015-08-01
    • 1970-01-01
    • 2016-12-20
    • 2022-12-09
    • 2019-03-01
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多