很多同学遇到时间转换的时候就总是google一番,下面我给大家梳理一下常用的概念、模块方法及使用方法,可以作为参考文档收藏起来 o(* ̄︶ ̄*)o
一、常用概念
2. 时区: 英国为0时区,中国在东八区 (UTC+08),UTC时间加上8小时就是我们本地时间了 有时会看到CST +0800 就是代表的中国标准时间。
3.时间戳: 是从1970年1月1日(UTC/GMT的午夜 1970-01-01T00:00:00)开始所经过的秒数。
二、常用时间操作:
1.时间格式化
1.1 格式化是使用time包中time类型的Format方法 , layout 字符串类型代表的是要格式化成的格式
1.2 golang的格式化比较特殊,是固定的格式:2006 01 02 15 04 05 中间的分隔符大家可以自己定义,看下 面示例代码:
func main(){
// 获取当前时间
now := time.Now()
// 格式化
nowStr1 := now.Format("2006年01月02日 15:04:05")
nowStr2 := now.Format("2006-01-02 15:04:05")
// 其他格式表示
unixData := now.Format(time.UnixDate)
fmt.Println("当前时间格式化字符串:", nowStr1)
fmt.Println("当前时间格式化字符串:", nowStr2)
fmt.Println("当前时间unixData表示:", unixData)
}
输出结果:
当前时间格式化字符串: 2021年03月05日 10:57:25
当前时间格式化字符串: 2021-03-05 10:57:25
当前时间unixData表示: Fri Mar 5 10:57:25 CST 2021
上面的其他格式在golang 源码format.go中已经定义好了很多表示形式的变量,有兴趣的同学可以阅读源码查看。
2. 时间转换
常用的转换就是时间与 时间戳互转、时间与字符串互转
时间戳与时间互转 是 time包下公共方法func Unix(sec int64, nsec int64) Time 与time类型func (t Time) Unix() int64 互为一对
时间字符串转时间类型是用到 func Parse(layout, value string) (Time, error) layout参数代表是转换的格式, value就是你要转的时间字符串.
func main(){
// 获取当前时间
now := time.Now()
// 时间转时间戳
timestamp := now.Unix()
fmt.Println("now:", now)
fmt.Println("时间戳:", timestamp)
// 时间戳转时间
dt := time.Unix(timestamp, 0 ) //time包的Unix第一个参数是代表从1970年1月1日午夜+timestamp
// 时间字符串转时间类型
now_str := now.Format("2006-01-02 15:04:05")
t, _ := time.Parse("2006-01-02 15:04:05", now_str)
}
输出:
now: 2021-03-05 13:25:10.07141 +0800 CST m=+0.000360923
时间戳: 1614921910
3. 时间加减操作
3.1 时间加减使用的是 time类型的Add方法func (t Time) Add(d Duration) Time,可以看到他的参数类型是Duration,
确定要加或减的时间范围,可以通过func ParseDuration(s string) (Duration, error) 来吧要加减的时间范围s转换成Duration类型,这里的s参数的有效单 位"ns", "us" (or "µs"), "ms", "s", "m", "h",
func main(){
// 获取当前时间
now := time.Now()
fmt.Println("now:", now)
afterD, _ := time.ParseDuration("10h")
after10h := now.Add(afterD)
fmt.Println("10小时之后:", after10h)
beforeD,_ := time.ParseDuration("-10h")
before10h := now.Add(beforeD)
fmt.Println("10小时之前:", before10h)
}
输出:
now: 2021-03-05 13:55:14.614533 +0800 CST m=+0.000240738
10小时之后: 2021-03-05 23:55:14.614533 +0800 CST m=+36000.000240738
10小时之前: 2021-03-05 03:55:14.614533 +0800 CST m=-35999.999759262
3.2 求时间差,程序逻辑执行的耗时经常会用到:
func main(){
// 获取开始时间
start := time.Now()
// 处理业务逻辑代码
time.Sleep(5)
// 获取结束时间
end := time.Now()
diff := end.Sub(start)
fmt.Println("业务逻辑耗时:",diff)
}
输出:
业务逻辑耗时: 13.711µs