You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言time.ParseInLocation方法对特定年份解析结果异常问题

Go语言time.ParseInLocation解析特定年份时区异常问题

使用Go语言的time.ParseInLocation方法解析Asia/Ho_Chi_Minh时区的时间时,发现1974年的时间解析结果时区显示为+0800,而1975年及之后的时间时区显示为+0700,看似存在异常。

测试代码

func main() {
    timeStr := "1974-05-10 10:30:00"
    timeStr2 := "1975-11-10 10:30:00"

    timeZone := "Asia/Ho_Chi_Minh"

    location, err := time.LoadLocation(timeZone)
    if err != nil {
        fmt.Println("Load Location error :", err)
        return
    }

    parsedTime1, err := time.ParseInLocation("2006-01-02 15:04:05", timeStr, location)
    if err != nil {
        fmt.Println("Format error:", err)
        return
    }

    parsedTime2, err2 := time.ParseInLocation("2006-01-02 15:04:05", timeStr2, location)
    if err2 != nil {
        fmt.Println("Format error:", err)
        return
    }

    fmt.Println("parsed time 1:", parsedTime1)
    fmt.Println("parsed time 2:", parsedTime2)
}

输出结果

parsed time 1: 1974-05-10 10:30:00 +0800 +08
parsed time 2: 1975-11-10 10:30:00 +0700 +07

原因说明

这并非time.ParseInLocation方法的异常,而是越南时区的历史变更导致的:越南在1975年之前采用UTC+8时区,1975年统一后改为UTC+7时区。Go语言的time包基于IANA时区数据库(tzdata)实现,会准确反映各个时区的历史时区规则,因此解析结果是正确的。

内容的提问来源于stack exchange,提问作者Jiang Mingxing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 13:03:20