time 模块使用
1.1关于当前时间
func main() {
now := time.Now() // 获取当前时间对象
year := now.Year() // 获取当前年份
month := now.Month() // 获取当前月份
day := now.Day() // 获取当前日
hour := now.Hour() // 获取当前时
minute := now.Minute() // 获取当前分
second := now.Second() // 获取当前秒
fmt.Println(year,month,day,hour,minute,second) // 2020 June 5 23 46 24
}
1.2关于时间戳
时间戳是绝对时间,与时区无关,可任意换算
func main() {
now := time.Now() // 获取当前时间对象
timeStamp := now.Unix()
timeStamp2 := now.UnixNano()
fmt.Println("当前时间戳: 1970.1.1到当前的秒数: ",timeStamp) // 1591372415
fmt.Println("当前纳秒时间戳: 1970.1.1到当前的纳秒数: ",timeStamp2) // 1591372415560794500
// 时间戳转化成时间格式
t := time.Unix(1591372415,0)//参数: 秒数 + 纳秒数
fmt.Println(t) // 2020-06-05 23:53:35 +0800 CST
}
1.3 关于时间间隔
time.Duration() //代表的就是时间间隔类型
// 案例,休眠五秒
time.Sleep( 5 * time.Second)
// 当使用int变量需要将int转化成time.Duration()类型
n := 5
time.Sleep( time.Duration(n) * time.Second)
相关时间常量
const (
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)
1.4 时间加减关系
now := time.Now() // 获取当前时间
// +
addHour := now.Add( time.Hour ) // 将当前时间加上一小时
// -
sub := addHour.Sub(now) //addHour(当前时间加一小时) 时间减去 当前时间
fmt.Println(sub) //1h0m0s Duration类型
比较两时间 and 时区是否相等
now := time.Now() // 获取当前时间
addHour := now.Add( time.Hour ) // 将当前时间加上一小时
fmt.Println(now.Equal( addHour )) // false
判断 now 是否在 addhour之前
now := time.Now() // 获取当前时间
addHour := now.Add( time.Hour ) // 将当前时间加上一小时
fmt.Println(now.Before(addHour)) // true
判断now 是否在addhour之后
now := time.Now() // 获取当前时间
addHour := now.Add( time.Hour ) // 将当前时间加上一小时
fmt.Println(now.After(addHour)) // false
1.5 使用定时器
func main() {
for now := range time.Tick( time.Second ) {
fmt.Println("当前时间: ", now)
}
}
定时器的实现, 传入一个时间间隔类型, 返回一个通道,
按照传入的时间间隔向通道中写入时间
然后返回通道, 让循环进行间隔遍历; 就是定时器的大致工作原理
1.6 时间格式化
<1> 时间格式时按照go语言的诞生日期来作为模板 “2006-01-02 15:04:05”
简记: 二零一六年 一 二 三(15是下午三点) 四 五
nowFormat := time.Now().Format("2006-01-02 15:04:05") // 获取当前时间并格式化
nowFormat := time.Now().Format("2006-01-02 15:04:05.000") // .000拿到毫秒数
<2> 将特定类型字符串时间解析为时间类型
func main() {
timeStr := "2018-01-02 15:00:00"
// 1.不指定时区解析 解析时间格式 + 时间字符串
timeParse, err := time.Parse("2006-01-02 15:04:05", timeStr)
if err != nil {
fmt.Printf("时间解析错误: %v\n", err)
return
}
fmt.Println(timeParse) //2018-01-02 15:00:00 +0000 UTC
// 2.指定时区解析
// 获取时区
loc, err := time.LoadLocation("Asia/Shanghai")//注意大小写
if err != nil {
fmt.Printf("获取时区错误: %v\n", err)
return
}
// 按照指定时区解析时间字符串
timeParse2, err := time.ParseInLocation("2006-01-02 15:04:05", timeStr, loc)
if err != nil {
fmt.Printf("时区解析时间错误: %v\n", err)
return
}
fmt.Println(timeParse2) // 2018-01-02 15:00:00 +0800 CST
}
1.7 计算代码执行耗时
Since – 自xxx以来
func main() {
//计算一段代码的耗时
start := time.Now()
for i := 0; i < 100000; i++ {
fmt.Println(i)
}
timeCost := time.Since( start )
fmt.Println(timeCost) // 16.9553ms
}
分享我在践行的理念: 少既是多, 慢既是块, 理解的多了记忆的就少了; 共勉☺