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
相关产品推荐
相关产品推荐

