1

在 Go 中,尝试将 string 转换为 时time.Time,使用 time 包的 Parse 方法不会返回预期结果。似乎问题出在时区上。我想更改为 ISO 8601,并结合 UTC 日期和时间。

package main

import (
    "fmt"
    "time"
)

func main() {
    const longForm = "2013-05-13T18:41:34.848Z"
    //even this is not working
    //const longForm = "2013-05-13 18:41:34.848 -0700 PDT"
    t, _ := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700 PDT")
    fmt.Println(t)
    //outputs 0001-01-01 00:00:00 +0000 UTC
}

提前致谢!

4

2 回答 2

6

您的格式字符串longForm不正确。如果您没有忽略返回的错误,您就会知道。引用文档

这些是用于 Time.Format 和 Time.Parse 的预定义布局。布局中使用的参考时间是:

Mon Jan 2 15:04:05 MST 2006

即 Unix 时间 1136239445。由于 MST 为 GMT-0700,因此可以认为参考时间为

01/02 03:04:05PM '06 -0700

要定义您自己的格式,请记下按照您的方式格式化的参考时间;例如,参见 ANSIC、StampMicro 或 Kitchen 等常量的值。

package main

import (
        "fmt"
        "log"
        "time"
)

func main() {
        const longForm = "2006-01-02 15:04:05 -0700"
        t, err := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700")
        if err != nil {
                log.Fatal(err)
        }
        fmt.Println(t)
}

操场


输出:

2013-05-13 01:41:34.848 +0000 UTC
于 2013-05-14T06:56:25.160 回答
2

time.Parse使用特殊值进行时间格式化,并期望格式与这些值一起传递。

如果您传递正确的值,它将以正确的方式解析时间。

所以过去的年份是 2006 年,月份是 01,然后就这样继续下去......

package main

import (
    "fmt"
    "time"
)

func main() {
    const longForm = "2006-01-02 15:04:05.000 -0700 PDT"
    t, err := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700 PDT")
    fmt.Println(t.UTC(), err)
    //outputs 2013-05-14 01:41:34.848 +0000 UTC <nil>
}
于 2015-01-28T18:29:45.667 回答