Summary of golang time issues (usage & FAQ: insert database time automatically +8)

Summary of golang time issues (usage & frequently asked questions)

1 Usage

1.1 time.Parse()

func main() {
    
    

	timeStr := "2023-09-26 20:56:23"
	allDate, _ := time.Parse("2006-01-02 15:04:05", timeStr)
	fmt.Println("全部解析=", allDate) 

	timeStr = "2023-09-26 20:56:00"
	miDate, _ := time.Parse("2006-01-02 15:04:00", timeStr)
	fmt.Println("解析到分钟=", miDate)

	timeStr = "2023-09-26 20:00:00"
	hDate, _ := time.Parse("2006-01-02 15:00:00", timeStr)
	fmt.Println("解析到小时=", hDate)
	/*
	运行结果:
	全部解析= 2023-09-26 20:56:23 +0000 UTC
	解析到分钟= 2023-09-26 20:56:00 +0000 UTC
	解析到小时= 2023-09-26 20:00:00 +0000 UTC
	*/
}

1.2 time.ParseInLocation()

func main() {
    
    
	//带有时区解析
	timeStr := "2023-09-26 20:56:23"
	date, _ := time.ParseInLocation("2006-01-02 15:04:05", timeStr, time.Local)
	//loc, _ := time.LoadLocation("Asia/Shanghai")
	//date, _ := time.ParseInLocation("2006-01-02 15:04:05", timeStr, loc)
	
	//结果: 由于time.Local会匹配我们本地时区所以在这里和我们指定时区效果一样
	//date= 2023-09-26 20:56:23 +0800 CST
	fmt.Println("带有时间区间解析之后, date=", date)
}

1.3 Truncate()、Add()、Sub()

func main() {
    
    
	timeStr := "2023-09-26 20:56:23"
	date, _ := time.ParseInLocation("2006-01-02 15:04:05", timeStr, time.Local)
	fmt.Println("before truncate hour, date=", date)
	date = date.Truncate(time.Hour)
	fmt.Println("after truncate, date=", date)
	date = date.Add(time.Duration(-2) * time.Hour)
	fmt.Println("sub 2 hour, date=", date)
	date = date.Add(time.Hour * 2)
	fmt.Println("add 3 hour, date=", date)
	/*
		before truncate hour, date= 2023-09-26 20:56:23 +0800 CST
		after truncate, date= 2023-09-26 20:00:00 +0800 CST
		sub 2 hour, date= 2023-09-26 18:00:00 +0800 CST
		add 3 hour, date= 2023-09-26 20:00:00 +0800 CST
	 */


	start, _ := time.Parse("2006-01-02 15:04:05", "2023-09-25 20:56:23")
	end, _ := time.Parse("2006-01-02 15:04:05", "2023-09-27 20:56:23")
	duration := end.Sub(start)
	//相差时间:48h0m0s
	fmt.Println("duration=", duration) 

}

2 FAQ

2.1 After inserting into the database, the time will automatically +8

Reason: Time zone problem. When operating mssql through

  • In golang, it can be solved by specifying the time zone through time.ParseInLocation
func main() {
    
    
	timeStr := "2023-09-26 20:56:23"
	date, _ := time.ParseInLocation("2006-01-02 15:04:05", timeStr, time.Local)
	// date= 2023-09-26 20:56:23 +0800 CST
	fmt.Println("加载指定时区, date=", date)
	//或者手动修复时区,手动修补时间
	local := time.FixedZone("CST", 8*3600)
	now := time.Now().In(local).Format("2006-01-02 15:04:05")
	// 2023-09-26 22:59:09
	fmt.Println("now=", now)
}

Guess you like

Origin blog.csdn.net/weixin_45565886/article/details/133323878