亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang 的夏令時

Golang 的夏令時

Go
元芳怎么了 2021-09-21 17:39:41
我一直在為調度界面設計一個 UI,用戶可以在其中設置未來幾個小時的計時器。如果可能的話,我希望能夠處理夏令時,我認為這很簡單。在檢查 golang 包中的 time.Time 時,我遇到了以下不一致情況,如果是這樣的話。package mainimport (   "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())     }   我知道 BST 2015 年 10 月 25 日凌晨 2 點應該會導致時鐘回到格林威治標準時間 (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+1b) 到 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 版編輯:使用 go version 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所以似乎在以后的版本中按我的預期工作......也發現了這個問題 夏令時和時區最佳實踐 所以將徹底閱讀它。
查看完整描述

1 回答

?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

Go 與除 Microsoft 之外的其他所有人一樣,使用IANA 時區數據庫,該數據庫具有包含在當前 Go 版本中的定期更新。

您使用了 2012 年 3 月發布的 go1.0.3(發布歷史)。2015 年的英國時區數據是后來添加的。

始終使用當前版本的 Go 進行時區計算。


查看完整回答
反對 回復 2021-09-21
  • 1 回答
  • 0 關注
  • 337 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號