我一直在设计用于调度界面的UI,用户可以在未来数小时内设置计时器。我希望能够处理日光节约时间,我认为这将非常简单。在检查time.golang包中的时间时,我遇到了以下不一致之处(如果确实如此)。
package main
import (
"fmt"
"time"
)
func main(){
const timeFormat = "2 Jan, 2006 3:04pm (MST)"
test , err := time.Parse( timeFormat, "25 Oct, 2015 1:59am (BST)" )
fmt.Println( test , test.UTC() , err)
dur , _ := time.ParseDuration( "1m" )
test = test.Add( dur )
fmt.Println( test , test.UTC())
fmt.Println( "--------------------" )
test , err = time.Parse( timeFormat, "25 Oct, 2015 2:01am (BST)" )
fmt.Println( test , test.UTC() , err)
test = test.Add( dur )
fmt.Println( test , test.UTC())
test = test.Sub( dur )
fmt.Println( test , test.UTC())
}
我知道2015年10月25日凌晨2点(BST)将使时钟回到格林尼治标准时间(UTC)凌晨1点。如果我将BST的凌晨1:59增加一分钟,则时间的确会切换为GMT。
2015-10-25 01:59:00 +0100 BST 2015-10-25 00:59:00 +0000 UTC <nil>
2015-10-25 01:00:00 +0000 GMT 2015-10-25 01:00:00 +0000 UTC
--------------------
2015-10-25 02:01:00 +0000 BST 2015-10-25 02:01:00 +0000 UTC <nil>
2015-10-25 02:02:00 +0000 BST 2015-10-25 02:02:00 +0000 UTC
但是,如果我在BST凌晨2点之后解析时间,我希望它会切换到GMT,就像在过渡期间增加时间一样。万一Add例程调用了过渡代码,我会再加一分钟,但这也不会将时间恢复为GMT。
我原以为会发生以下情况之一
a)BST始终保持GMT + 1
b)在BST为“无效”以自动更改为正确的GMT时间的任何时间(无效的BST在10月的最后一个星期日之后的凌晨2点到次年3月的最后一个星期日之后的凌晨2点之间)
c)如果使用BST在某些日期内创建日期(可能在其他国家/地区的其他夏令时),则会引发错误。
否则,我将不得不检查用户是否在BST中输入日期,该日期是否在BST之外,然后将用户调整或强制为UTC时间,这与在库中内置夏令时功能的目的相违背。
在进行研究时,我发现了这个https://www.youtube.com/watch?v=-5wpm-gesOY,并确定它绝对不像我最初设想的那么简单...
任何见识或更好的方式来解决夏时制时间将不胜感激。
在Debian Wheezy上使用go版本1.0.2
编辑:使用1.3.3版重试并获得此输出
2015-10-25 01:59:00 +0100 BST 2015-10-25 00:59:00 +0000 UTC <nil>
2015-10-25 01:00:00 +0000 GMT 2015-10-25 01:00:00 +0000 UTC
--------------------
2015-10-25 01:00:00 +0000 GMT 2015-10-25 01:00:00 +0000 UTC <nil>
2015-10-25 01:01:00 +0000 GMT 2015-10-25 01:01:00 +0000 UTC
因此,似乎可以按预期在以后的版本中工作。...还发现了此问题夏令时和时区最佳实践因此,请仔细阅读。
谢谢。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句