golang 解析时间格式字符串成time 类型一定要用 time.ParseInLocation 不要用 time.Parse

在docker中将环境变量TZ设置为Asia/Shanghai,将/etc/timezone文件写为Asia/Shanghai,time.Local就表示上海时区。time.Parse()解析时间时间用的是 UTC时区,time.ParseInLocation 用的是指定时区。看如下代码,同一字符串用不同时区解析。time类型比较先后是有差异的。在写入数据库的时候也是,并且gorm打印数据库sql的时候会看到明明sql是指定写入“2025-05-01 00:00:00”,但是用工具查看写入后的数据又是“2025-05-01 08:00:00”。

	
func main() {
	a := "2025-05-01 00:00:00"
	b, _ := time.ParseInLocation("2006-01-02 15:04:05", a, time.Local)
	c, _ := time.Parse("2006-01-02 15:04:05", a)
	fmt.Println(c.Before(b))

	fmt.Println(b.Format("2006-01-02 15:04:05"))
	fmt.Println(c.Format("2006-01-02 15:04:05"))

	fmt.Println(b.Local().Format("2006-01-02 15:04:05"))
	fmt.Println(c.Local().Format("2006-01-02 15:04:05"))
}
false

2025-05-01 00:00:00
2025-05-01 00:00:00

2025-05-01 00:00:00
2025-05-01 08:00:00
posted @ 2025-04-27 16:19  熊先生不开玩笑  阅读(247)  评论(0)    收藏  举报