首页 >后端开发 >Golang >为什么 Go 中的 time.Parse 在涉及时区时无法将字符串转换为 time.Time 实例?

为什么 Go 中的 time.Parse 在涉及时区时无法将字符串转换为 time.Time 实例?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-17 00:50:03213浏览

Why does `time.Parse` in Go fail to convert a string to a `time.Time` instance when timezone is involved?

理解 time.Parse 行为

当使用 Go 的 time 包中的 Parse 方法将字符串转换为 time.Time 实例时,它是考虑时区并提供适当的格式字符串很重要。由于时区处理不正确,以下代码无法按预期将字符串转换为 time.Time:

import (
    "fmt"
    "time"
)

func main() {
    const longForm = "2013-05-13T18:41:34.848Z"
    t, _ := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700 PDT")
    fmt.Println(t)
}

此代码打印 0001-01-01 00:00:00 0000 UTC 而不是预期的2013-05-13 01:41:34.848 0000 UTC。

解决方案:指定正确的格式字符串

不正确的行为是由不正确的格式字符串引起的。应定义 longForm 以匹配输入字符串的格式:

const longForm = "2006-01-02 15:04:05 -0700"

此格式字符串对应于输入字符串的格式:2013-05-13 18:41:34.848 -0700 PDT。

更新的代码:

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 PDT")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(t)
}

使用正确的格式字符串,代码现在将输出预期时间:2013-05-13 01:41:34.848 0000 UTC .

以上是为什么 Go 中的 time.Parse 在涉及时区时无法将字符串转换为 time.Time 实例?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn