理解Go 中的time.Parse 行為
當嘗試使用time.Parse 方法將字串轉換為Go 中的time.Time值時,設定正確的格式字串對於獲得預期結果至關重要。
考慮以下程式碼snippet:
package main import ( "fmt" "time" ) func main() { const longForm = "2013-05-13T18:41:34.848Z" //even this is not working //const longForm = "2013-05-13 18:41:34.848 -0700 PDT" t, _ := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700 PDT") fmt.Println(t) }
程式碼嘗試使用 longForm 格式字串解析格式為「2013-05-13 18:41:34.848 -0700 PDT」的字串。但是,輸出是意外的:「0001-01-01 00:00:00 0000 UTC」。
要理解此行為,需要注意的是 time.Parse 方法的預設參考時間是“ Mon Jan 2 15:04:05 MST 2006”,表示 Unix 時間 1136239445。這意味著格式字串必須相應地表示參考時間。
在給定的程式碼中,longForm 格式字串錯誤地將參考時間表示為「2006-01-02 15:04:05 -0700」。參考時間格式不符會導致意外輸出。
要解決此問題,應修改longForm 格式字串以匹配參考時間:
package main import ( "fmt" "log" "time" ) func main() { const longForm = "2006-01-02 15:04:05 -0700" t, err := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700") if err != nil { log.Fatal(err) } fmt.Println(t) }
使用正確的longForm格式化字串,time.Parse 方法現在可以準確地將字符串轉換為time.Time 值:「2013-05-13 01:41:34.848 0000 UTC」。
以上是為什麼我的 Go `time.Parse` 函數傳回意外的時間值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!