Golang在时间格式之间转换

时间:2019-01-16 07:36:09

标签: string go time

我正在尝试解析一个时间字符串,该时间字符串作为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

我想念什么?

2 个答案:

答案 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())