[英]Go: time.Parse() issue
我有以下代碼:
timeLocal := "01/July/2015:18:12:25 +0900"
inFormat := "02/January/2006:15:04:05 -0700"
parsed, err := time.Parse(inFormat, timeLocal)
if err != nil {
log.Fatal("Time format was not recognized!")
}
現在,解析工作正常。 但是當我跑步時:
fmt.Println(timeLocal)
fmt.Println(inFormat)
fmt.Println(parsed)
輸出為:
01/July/2015:18:12:25 +0900
02/January/2006:15:04:05 -0700
2015-07-01 18:12:25 +0900 +0900
第二個+0900
應該存在嗎? 我在做什么愚蠢的事情? 抱歉,這真是漫長的一天,我看不到我所缺少的。
哦,整個文件在這里:
package main
import (
"fmt"
"time"
"log"
)
func main() {
timeLocal := "01/July/2015:18:12:25 +0900"
inFormat := "02/January/2006:15:04:05 -0700"
parsed, err := time.Parse(inFormat, timeLocal)
if err != nil {
log.Fatal("Time format was not recognized!")
}
fmt.Println(timeLocal)
fmt.Println(inFormat)
fmt.Println(parsed)
}
Time.String使用的默認格式是:
2006-01-02 15:04:05.999999999 -0700 MST
注意“ MST”部分。 由於您未提供區域名稱,因此格式只是將其“名稱”與偏移相同,即“ +0900”。 如果將其更改為“ +0000”,則會看到這確實是時區名稱:
2015-07-01 18:12:25 +0000 UTC
如果您不想這樣做,只需使用另一種格式進行打印:
myFmt := "2006-01-02 15:04:05.999999999 -0700"
fmt.Println(parsed.Format(myFmt))
如果你看的文檔time.Time
你會看到默認的輸出格式是什么:
字符串返回使用格式字符串格式化的時間:
“ 2006-01-02 15:04:05.999999999 -0700 MST”
現在,您應該看到第二個+0900
在做什么-這是一個位置(時區)名稱。 由於您的輸入格式沒有名稱,因此只需重復一個偏移量即可。
您可以通過更改輸入格式以解析位置名稱來提供名稱。 另外,如果不需要,您可以提供不打印名稱的輸出格式。
您修改的示例:
package main
import (
"fmt"
"time"
"log"
)
func main() {
timeLocal := "01/July/2015:18:12:25 +0900 XYZ"
inFormat := "02/January/2006:15:04:05 -0700 MST"
parsed, err := time.Parse(inFormat, timeLocal)
if err != nil {
log.Fatal("Time format was not recognized!")
}
fmt.Println(timeLocal)
fmt.Println(inFormat)
fmt.Println(parsed) // 2015-07-01 18:12:25 +0900 XYZ
fmt.Println(parsed.Format("02/January/2006:15:04:05 -0700"))
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.