Golang语言学习笔记(七)

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("我在执行定时任务")
	}


}
原文地址:https://www.cnblogs.com/hanajiang/p/13776499.html