很多同学遇到时间转换的时候就总是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