Golang time包以及日期函数
1.time包
时间和日期时编程中经常用到的,在golang中time包提供了时间的显示和测量用的函数
2.time.Now()获取当前时间
可以通过time.Now()函数获取当前的时间对象,然后获取时间对象的年月日时分秒等信息
3.时间格式化
时间类型有一个自带的方法Format进格式化
4.获取当前时间戳
时间戳时自1970年1月1日至当前时间的总秒数。也被称为Unix时间戳
5.把时间戳转换成日期字符串
通过time.Unix将时间戳转换成时间对象,再用Format将时间对象转换成指定格式的日期字符串
6.把日期字符串转换成时间戳
通过time.ParseInLocation方法将字符串转换成时间对象,再用Unix()方法将时间对象转换成时间戳
7.时间间隔
time.Duration是time包定义的一个类型,它代表两个时间点之间经过的时间,以纳秒为单位,time.Duration表示一段时间间隔,可表示的最长时间段大约290年
time包中定义的时间间隔类型的常量如下:
const{
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
}
8.时间操作函数
Add
在日常编码过程中可能会遇到要求时间+时间间隔的需求,Go语言的时间对象有提供Add方法如下:
func (t Time) Add(d Duration) Time
Sub
求两个时间之间的差值:
func (t Time) Sub(u Time) Duration
返回一个时间段t-u。如果超出了Duration可以表示的最大值/最小值,将返回最大值/最小值。
Equal
func (t Time) Equal(u Time) bool
判断两个时间是否相同,会考虑时区的影响,因此不同时区标准的时间也可以正确比较。这种方法和用t == u不同,这种方法还会比较地点和时区信息
Before
func (t Time) Before(u Time) bool
9.golang定时器
1.使用time.NewTicker(时间间隔)来设置定时器
2.time.Sleep(time.Second)来实现定时器
代码:
package main
import (
"fmt"
"time"
)
func main() {
// timeObj := time.Now()
// fmt.Println(timeObj)//2020-10-06 19:11:19.3600858 +0800 +08 m=+0.024364701
// //2020-10-06 19:11:19
// year := timeObj.Year()
// month := timeObj.Month()
// day := timeObj.Day()
// hour := timeObj.Hour()
// minute := timeObj.Minute()
// second := timeObj.Second()
// fmt.Printf("%d-%d-%d %d:%d:%d
",year,month,day,hour,minute,second)//2020-10-6 19:14:57
// //%02d中的2表示宽度,如果整数不够2列就补上0
// fmt.Printf("%d-%02d-%02d %02d:%02d:%02d
",year,month,day,hour,minute,second)//2020-10-06 19:15:49
/*
时间类型有一个自带的方法Format进格式化
需要注意的是Go语言中格式化时间模板不是常见的Y-m-d H:M:S
而是使用Go的诞生时间2006年1月2号15点04分
2006 年
01 月
02 日
03 时 12小时制/15 时 24小时制
04 分
05 秒
*/
// now := time.Now()
// //12小时制
// var str = now.Format("2006-01-02 03:04:05")
// fmt.Println(str)//2020-10-06 07:22:35
// //24小时制
// var str1 = now.Format("2006-01-02 15:04:05")
// fmt.Println(str1)//2020-10-06 19:25:12
//获取当前时间戳
// timeObj := time.Now()
// unixTime := timeObj.Unix()
// fmt.Println("当前时间戳:",unixTime)//当前时间戳: 1601983768
// unixNaTime := timeObj.UnixNano()//纳秒时间戳
// fmt.Println("当前纳秒时间戳:",unixNaTime)//当前纳秒时间戳: 1601983959781877500
//把时间戳转换成日期字符串
// unixTime := 1601983768
// timeObj := time.Unix(int64(unixTime),0)
// var str = timeObj.Format("2006-01-02 15:04:05")
// fmt.Println(str)//2020-10-06 19:29:28
//把日期字符串转换成时间戳
// var str = "2020-10-06 19:29:28"//目标字符串
// var sdf = "2006-01-02 15:04:05"//模板
// //目标字符串和模板的格式需要保持一致
// timeObj, _ := time.ParseInLocation(sdf, str, time.Local)
// fmt.Println(timeObj)//2020-10-06 19:29:28 +0800 +08
// fmt.Println(timeObj.Unix())//1601983768
/*
time包中定义的时间间隔类型的常量如下:
const{
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
}
*/
// fmt.Println(time.Millisecond)//1ms:表示1毫秒
// fmt.Println(time.Second)//1s:表示1秒
//时间操作函数
// var timeObj = time.Now()
// fmt.Println(timeObj)//2020-10-06 19:55:45.3618237 +0800 +08 m=+0.013965801
// timeObj = timeObj.Add(time.Hour)
// fmt.Println(timeObj)//2020-10-06 20:55:45.3618237 +0800 +08 m=+3600.013965801
//golang定时器
// ticker := time.NewTicker(time.Second)
// n := 5
// for t := range ticker.C {
// n--
// fmt.Println(t)
// if n == 0 {
// ticker.Stop()//终止这个定时器
// break
// }
// }
//休眠方法
// fmt.Println("aaaa")
// time.Sleep(time.Second)
// fmt.Println("bbbb")
// time.Sleep(time.Second)
// fmt.Println("cccc")
// time.Sleep(time.Second)
// fmt.Println("dddd")
//死循环
for {
time.Sleep(time.Second)
fmt.Println("我在执行定时任务")
}
}