一尘不染

将UTC字符串转换为时间对象

go

我有这个约会时间,或类似的东西。

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)

如何从字符串创建时间对象?


阅读 323

收藏
2020-07-02

共1个答案

一尘不染

您很可能使用了错误的布局,并且没有检查返回的错误。

布局必须是此日期/时间,格式为您输入的时间为:

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编码中的特殊字符:它表示空格。因此,+gets转换为空间(因此从您的时间字符串中消失了)。使用正确的URL编码!检出net/url包装,然后查看本例

2020-07-02