我正在尝试解析一个时间字符串,该时间字符串作为JSON在网络上传输。在下面的代码中,我只是在尝试进行时间解析:
currentTime := time.Now().String()
//currentTime has the time
t1, _ := time.Parse(time.RFC3339, currentTime)
fmt.Println(t1.String())
最后一行仅扭曲一行时间并产生输出: 0001-01-01 00:00:00 +0000 UTC
请参见以下GoPlayground:https://play.golang.org/p/Q_G_qYcnaHP
我想念什么?
答案 0 :(得分:1)
首先,您要忽略time.Parse()
返回的错误。永远不要忽略错误。
如果打印错误:
currentTime := time.Now().String()
t1, err := time.Parse(time.RFC3339, currentTime)
fmt.Println(err)
fmt.Println(t1.String())
输出(在Go Playground上尝试):
parsing time "2009-11-10 23:00:00 +0000 UTC m=+0.000000001" as "2006-01-02T15:04:05Z07:00": cannot parse " 23:00:00 +0000 UTC m=+0.000000001" as "T"
0001-01-01 00:00:00 +0000 UTC
问题是Time.String()
产生的文本表示形式与time.RFC3339
指定的格式不同。 Time.String()
使用以下格式产生输出:
"2006-01-02 15:04:05.999999999 -0700 MST"
当您尝试使用以下格式解析它时:
RFC3339 = "2006-01-02T15:04:05Z07:00"
显然那是行不通的。
答案 1 :(得分:0)
@icza是正确的。您应该在godoc https://golang.org/pkg/time/#Time.String
上进行检查String returns the time formatted using the format string
"2006-01-02 15:04:05.999999999 -0700 MST"
如果您是golang的新手,您可能想知道正确的方法。
方法如下:
formatstr:="2006-01-02 15:04:05.999999999 -0700 MST"
currentTime := time.Now().String()
t1, _ := time.Parse(formatstr, currentTime)
fmt.Println(t1.String())