登录
首页 >  Golang >  Go问答

如何使用 ParseInLocation 打印不同时区的时间?

来源:stackoverflow

时间:2024-03-26 15:48:33 277浏览 收藏

在使用 `ParseInLocation` 解析特定时区的时间时,如果未明确指定年份,系统可能会默认使用 0000 年。在这种情况下,系统使用的时区信息可能与指定时区在该年份的实际时区不一致。这可能会导致时区名称出现差异,例如在本文中提到的 "hmt" 时区。为了避免此问题,建议在解析时间时始终指定年份,以确保使用正确的时区信息。

问题内容

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

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


解决方案


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

今天关于《如何使用 ParseInLocation 打印不同时区的时间?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>