在验证一些时间的时候经常会发现少了8小时,那么可能会是时区的问题导致的
go的time库中提供了location的两个时区local和utc
local表示当前系统的时区,utc表示通用协调时间也就是零时区,time默认了是utc时区
我们可以通过time提供的loadlocation去切换时区
如果传入name是空或者utc那么返回utc,如果传入的name是Local那么返回当前的本地时区Local,否则name应该是IANA时区数据库中记录的地点名,在不同的约定路径尽可能地查找所需的数据库
func LoadLocation(name string) (*Location, error)
package main
import (
"log"
"time"
)
func main() {
location,_ := time.LoadLocation("Asia/Shanghai")
inputTime := "2029-09-04 12:04:05"
layout := "2006-01-02 15:04:05"
//parse如果没有传入固定的时区 那么默认返回utc 虽然我们之前传入了时区,这里的时候需要我们传参的时候就要传入时区比如使用ParseInLocation就可以解决
t ,_ := time.Parse(layout,inputTime)
datatime := time.Unix(t.Unix(),0).In(location).Format(layout)
log.Printf("输入时间 %s, 输出时间%s",inputTime,datatime)
t ,_ = time.ParseInLocation(layout,inputTime,location)
datatime = time.Unix(t.Unix(),0).In(location).Format(layout)
log.Printf("输入时间 %s, 输出时间%s",inputTime,datatime)
}
参考时间的格式
2006-01-02 15:04:05
Jan 2 15:04:05 2006 MST
1 2 3 4 5 6 -7