文章目录

time 包

UTC or CST

utc 是世界协调时间(标准),cst 是中央标准时间

当UTC时间为0点时,中国CST时间要加 8h,即为8点AM

当UTC时间为0点时,美国CST时间要减 6h,即为18点PM

返回 Time 时间类型

// 返回当前时间 Time 类型
now := time.Now()
fmt.Printf("%v", now)
// 输出
2022-05-29 19:47:46.435119 +0800 CST m=+0.000401431

// 返回指定时间的 Time 类型 UTC 时间
date := time.Date(2022, 1, 2, 3, 4, 5, 0, time.UTC)
fmt.Printf("%v", date)
// 输出
2022-01-02 03:04:05 +0000 UTC

拿到 Time 中年月日时分秒类型

// 返回具体年月日时分秒
date := time.Date(2022, 1, 2, 3, 4, 5, 0, time.UTC)
fmt.Printf("%v,%v,%v,%v,%v,%v", date.Year(), date.Month(), date.Day(), date.Hour(), date.Minute(), date.Second())
// 输出
2022,January,2,3,4,5

格式化 Time 类型输出

// 格式化 Time 类型输出,返回 string
date := time.Date(2022, 1, 2, 3, 4, 5, 0, time.UTC)
fmt.Println(date.Format("2006-1-2 15:04:05"))
// 输出
2022-1-2 03:04:05

求两个 Time 时间差

// 求两个 Time 时差 Duration
date1 := time.Date(2022, 1, 2, 3, 4, 5, 0, time.UTC)
date2 := time.Date(2022, 1, 2, 4, 5, 6, 0, time.UTC)
diff := date2.Sub(date1)
fmt.Printf("%v", diff)
// 输出
1h1m1s

// diff.Hours() 或者 diff.Minutes() 或者 diff.Seconds() 可以把这个 Duration 完全转成时或分或秒

把时间字符串解析成一种格式

// 把时间 string 解析成一种格式,返回 Time, error
date, _ := time.Parse("2006-01-02 15:04:05", "2022-01-02 03:04:05")
fmt.Printf("%v", date)
// 输出
2022-01-02 03:04:05 +0000 UTC

unix时间戳

// 当前时间 Time 类型转 int64 时间戳秒级
now := time.Now()
ts := now.Unix()
nts := now.UnixNano()
fmt.Printf("%v", ts)
fmt.Printf("%v", nts)
// 输出
1653827591
1653827591000000000

// 时间戳秒级 转 Time。Unix 函数第一个参数是 sec,第二个参数 nsec
date := time.Unix(1653827353, 0)
fmt.Printf("%v", date)
// 输出
2022-05-29 20:29:13 +0800 CST

// 时间戳秒级 转 Time。1s = 1e3 ms,1ms = 1e6 ns
date := time.Unix(0, 1653827353e9)
fmt.Printf("%v", date)
// 输出
2022-05-29 20:29:13 +0800 CST