鉴于 IANA 条目是已知的,我如何找到特定的日期偏移量(日光与标准)?

我有一个以这种格式显示的日期字符串列表,没有任何时区或偏移信息:


[

   "2019-04-30T12:34:00.000",  // In 2019, DST started in March 10, 2019, so this should have the appropriate DST offset

   "2017-11-20T13:45:00.000"   // In 2017, DST ended on November 5, 2017 so this should have the appropriate standard time offset

]

我知道创建这些日期和时间的 IANA 区域(例如,America/New_York),但我无法弄清楚如何使用 go 和time包在给定此信息的情况下动态生成适当的偏移量。

我想过以下几点:

  1. 将硬编码值附加到日期字符串的末尾(即"2019-04-30T12:34:00.000" + "-04:00

  2. 编写自定义逻辑以确定日期是否在标准时间或夏令时的边界内

但是,这些解决方案仅适用于某些日期,否则逻辑会变得非常复杂。


皈依舞
浏览 123回答 1
1回答

梵蒂冈之花

我能够弄清楚package mainimport (    "log"    "time")func main() {    Chicago, _ := time.LoadLocation("America/Chicago")    t := time.Date(2019, time.March, 1, 12, 30, 0, 0, Chicago)    log.Print(t)       // 2019-03-01 12:30:00 -0600 CST    log.Print(t.UTC()) // 2019-03-01 18:30:00 +0000 UTC    t = time.Date(2019, time.November, 2, 12, 30, 0, 0, Chicago)    log.Print(t)       // 2019-11-02 12:30:00 -0500 CDT    log.Print(t.UTC()) // 2019-11-02 17:30:00 +0000 UTC}去游乐场@https ://play.golang.org/p/nP28y9jSDAk通过利用自定义布局和time.LoadLocation的更清洁的解决方案package mainimport (    "fmt"    "time")func main() {    Chicago, _ := time.LoadLocation("America/Chicago")    cdt, _ := time.ParseInLocation("2006-01-02T15:04:05.999999", "2019-04-30T12:34:00.000", Chicago)    fmt.Println(cdt)    fmt.Println(cdt.UTC())    cst, _ := time.ParseInLocation("2006-01-02T15:04:05.999999", "2017-11-20T13:45:00.000", Chicago)    fmt.Println(cst)    fmt.Println(cst.UTC())}去游乐场@https ://play.golang.org/p/3Ai4qVz0af5
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go