为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
皈依舞 2022-06-01 18:22:49
我有一个以这种格式显示的日期字符串列表,没有任何时区或偏移信息:[   "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包在给定此信息的情况下动态生成适当的偏移量。我想过以下几点:将硬编码值附加到日期字符串的末尾(即"2019-04-30T12:34:00.000" + "-04:00)编写自定义逻辑以确定日期是否在标准时间或夏令时的边界内但是,这些解决方案仅适用于某些日期,否则逻辑会变得非常复杂。
查看完整描述

1 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

我能够弄清楚


package main


import (

    "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 main


import (

    "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


查看完整回答
反对 回复 2022-06-01
  • 1 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号