我一直在為調(diào)度界面設(shè)計(jì)一個(gè) UI,用戶可以在其中設(shè)置未來幾個(gè)小時(shí)的計(jì)時(shí)器。如果可能的話,我希望能夠處理夏令時(shí),我認(rèn)為這很簡單。在檢查 golang 包中的 time.Time 時(shí),我遇到了以下不一致情況,如果是這樣的話。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 點(diǎn)應(yīng)該會(huì)導(dǎo)致時(shí)鐘回到格林威治標(biāo)準(zhǔn)時(shí)間 (UTC) 凌晨 1 點(diǎn)。如果我將 BST 凌晨 1:59 增加一分鐘,時(shí)間確實(shí)會(huì)切換到 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 點(diǎn)之后解析時(shí)間,我希望它切換到 GMT,就像在過渡期間增加時(shí)間一樣。如果 Add 例程調(diào)用了過渡代碼,我會(huì)再次添加一分鐘,但這也不會(huì)將時(shí)間恢復(fù)為 GMT。我原以為會(huì)發(fā)生以下情況之一a) 讓 BST 始終保持 GMT+1b) 到 BST“無效”的任何時(shí)間自動(dòng)更改為正確的 GMT 時(shí)間(無效 BST 在 10 月最后一個(gè)星期日之后的凌晨 2 點(diǎn)和次年 3 月最后一個(gè)星期日之后的凌晨 2 點(diǎn)之間)c) 如果在這些日期內(nèi)使用 BST(可能還有其他國家/地區(qū)的其他夏令時(shí))創(chuàng)建日期,則會(huì)引發(fā)錯(cuò)誤。否則,我將不得不檢查用戶是否在 BST 中輸入了一個(gè)日期,該日期是否在 BST 之外,并調(diào)整或強(qiáng)制用戶使用 UTC 時(shí)間,這違背了在庫中內(nèi)置夏令時(shí)功能的目標(biāo)。在研究時(shí),我發(fā)現(xiàn)了這個(gè)https://www.youtube.com/watch?v=-5wpm-gesOY 并決定它絕對(duì)不像我最初假設(shè)的那么簡單......任何見解或處理夏令時(shí)的更好方法將不勝感激。在 Debian Wheezy 上使用 go 1.0.2 版編輯:使用 go version 1.3.3 重試并得到這個(gè)輸出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所以似乎在以后的版本中按我的預(yù)期工作......也發(fā)現(xiàn)了這個(gè)問題 夏令時(shí)和時(shí)區(qū)最佳實(shí)踐 所以將徹底閱讀它。
1 回答

慕無忌1623718
TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊
Go 與除 Microsoft 之外的其他所有人一樣,使用IANA 時(shí)區(qū)數(shù)據(jù)庫,該數(shù)據(jù)庫具有包含在當(dāng)前 Go 版本中的定期更新。
您使用了 2012 年 3 月發(fā)布的 go1.0.3(發(fā)布?xì)v史)。2015 年的英國時(shí)區(qū)數(shù)據(jù)是后來添加的。
始終使用當(dāng)前版本的 Go 進(jìn)行時(shí)區(qū)計(jì)算。
- 1 回答
- 0 關(guān)注
- 317 瀏覽
添加回答
舉報(bào)
0/150
提交
取消