繁体   English   中英

时间解析行为

[英]time.Parse behaviour

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

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
}

提前致谢!

您的格式字符串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

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>
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM