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

为什么当日期早于 1900 年时,时间包具有不同的行为?

为什么当日期早于 1900 年时,时间包具有不同的行为?

Go
跃然一笑 2022-08-30 21:41:54
我尝试使用golang的时间包从SQL服务器格式化一些带有时区的日期,但发现:package mainimport (    "time"    "fmt")func main() {    loc, _ := time.LoadLocation("Asia/Shanghai")    endTime1 := time.Date(1, 1, 17, 23, 59, 59, 999*int(time.Millisecond), loc)    fmt.Printf("format string 1 : %s\n", endTime1.UTC().Format("2006-01-02T15:04:05.000Z"))        endTime2 := time.Date(2021, 1, 17, 23, 59, 59, 999*int(time.Millisecond), loc)    fmt.Printf("format string 2 : %s\n", endTime2.UTC().Format("2006-01-02T15:04:05.000Z"))}# outputformat string 1 : 0001-01-17T15:54:16.999Zformat string 2 : 2021-01-17T15:59:59.999Z输出的“HH:mm:ss”部分不同。我终于找到了关键时间是1900-12-31,但没有从源代码或互联网上找到任何关于那一天的线索。
查看完整描述

1 回答

?
www说

TA贡献1775条经验 获得超8个赞

似乎与上海时区有关。

此页面,您可以阅读

1901 年 1 月 1 日 - 时区更改 (LMT → CST) 当当地标准时间即将达到 1901 年 1 月 1 日星期二时,00:00:00 时钟向后调 0:05:43 小时到 1900 年 12 月 31 日星期一,改为当地标准时间 23:54:17。

此外,我们可以在 go 文档中找到更多信息

夏令时转换跳过或重复时间。例如,在美国,2011年3月13日凌晨2:15从未发生过,而2011年11月6日凌晨1点15分发生了两次。在这种情况下,时区的选择以及时间的选择没有明确定义。Date 返回在转换中涉及的两个区域之一中正确的时间,但它不保证哪个区域是正确的。


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

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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