go 掃雷:time.Format 與 time.Parse
地雷 1: time.Format dt := time.Now() fmt.Println(dt.String()) 輸出為: 2023-01-13 19:21:12.4065311 +0800 CST m=+0.000709101 想要自訂輸出格式 strWrong := dt.Format("2023-01-13 15:01:05") fmt.Println(strWrong) 結果輸出很奇怪的東西: 13137-01-17 19:01:41 本來認為 go 可以依照指定的格式輸出,結果查了資料才發現必須用指定的時間才會乖乖聽話 正確: strRight := dt.Format(" 2006-01-02 15:04:05 ") fmt.Println(strRight) 輸出: 2023-01-13 19:24:41 地雷 2: time.Parse 想要從字串解析為日期時間,格式字串仍然須為指定時間 2006-01-02 15:04:05 // 沒用到秒,所以格式字串省略秒的部分 d3, _ := time.Parse("2006-01-02 15:04", "2023-01-13 12:25") fmt.Println(d3.String()) 預期輸出: 2023-01-13 12:25:00 +0800 CST 錯誤輸出, 時區錯誤 : 2023-01-13 12:25:00 +0000 UTC 改用: fmt.Println(d3.Local()) 錯誤輸出,時區對了,但 多了 8 小時 : 2023-01-13 20 :25:00 +0800 CST 查資料發現改用另一個函數即可得到正確結果 // 第三個參數用 time.Local d3, _ := time.ParseInLocation("2006-01-02 15:04", "2023-01-13 12:25", time.Local) fmt.Println(d3.String()) fmt.Println(d3.Local()) 輸出均為正確結果: 2023-01-13 12:25:00 +0800 CST 2023-01-13 12:25:00 +0800 CST