我有这个日期时间,或者类似的东西。
2014-11-17 23:02:03 +0000 UTC
我想将其转换为时间对象,但我无法从 time.Parse
生成任何输出,除了:
0001-01-01 00:00:00 +0000 UTC
我试过这些布局:
time.RFC3339
0001-01-01 00:00:00 0000 UTC
2016-10-10
time.UnixDate
还有一些 - 没有一个起作用。
这就是我调用 parse
的方式:
updatedAt, err := time.Parse(time.UnixDate, updatedAtVar)
如何从字符串创建时间对象?
最佳答案
很可能你使用了错误的布局,并且你没有检查返回的错误。
布局必须是这个日期/时间,您输入时间的格式是:
Mon Jan 2 15:04:05 -0700 MST 2006
查看这段工作代码:
layout := "2006-01-02 15:04:05 -0700 MST"
t, err := time.Parse(layout, "2014-11-17 23:02:03 +0000 UTC")
fmt.Println(t, err)
输出(在 Go Playground 上尝试):
2014-11-17 23:02:03 +0000 UTC <nil>
编辑:
在您的问题中,您在输入时间中包含了一个 +
符号(作为时区偏移的一部分),但您在使用其他格式的时间时遇到了错误。
Time.String()
使用以下格式字符串:
"2006-01-02 15:04:05.999999999 -0700 MST"
所以要么用这个来解析时间,要么用Time.Format()
生成您可以在其中指定布局的字符串表示形式,这样您就可以使用相同的布局来解析时间字符串。
第二轮:
您在 URL 中包含您的时间字符串。 +
符号是 URL 编码中的一个特殊字符:它表示空格。因此 +
被转换为空格(因此它从您的时间字符串中消失)。使用正确的 URL 编码!查看net/url
包,和this example .
关于datetime - 将 UTC 字符串转换为时间对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41958170/