go语言time包实践 | 青训营笔记

263 阅读3分钟

time包

Go语言中的 time 包提供了 时间显示和时间格式字符串处理 等功能,处理和时间序列相关的数据时大多需要使用到time包

常用操作

获取当前时间

date数据可以通过字符串扫描获取、指定不易

package main

import ( 
	"fmt"
	"time"
)

func main() {
	now := time.Now() 
	fmt.Printf("当前时间为:%v\n", now)
	year := now.Year()     //年
	month := now.Month()   //月
	day := now.Day()       //日
	hour := now.Hour()     //小时
	minute := now.Minute() //分钟
	second := now.Second() //秒
	fmt.Printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second)
}

简单计时

单纯的计时只需要要在程序开始之前和结束之后分别调用一次time.now( ),再获取这两次时间的间隔即可,实现如下:

	start := time.Now()
	solution()//某函数操作
	end := time.Now()
	fmt.Println("本次计算消耗时间为:", end.Sub(start))

实现休眠

这里有个小坑,正常休眠传入直接传入【数字】*【单位】既可以,如下

time.Sleep(10 * time.Second)//正常编译,休眠10s

但是数值值用变量表达的时候就会报错,原因是seleep其实要接受的是Duration型变量

var i = 10
time.Sleep(i * time.Second)//用i来代替就时编译通过不

该成如下即可

var i = 1000
time.Sleep(time.Duration(i) * time.Millisecond)

时间戳相关

  • t.Unix()获取t的时间戳
  • t.UnixNano获取当前t的纳秒级时间戳
  • time.Unix(时间戳a)将时间戳转为time

判断时间t是周几可以用t.Weekday()方法

字符串解析与格式化

time数据类型中的Parse与Format是一对互逆的函数,使用时需要额外传入一个layout参数表示你想获得的时间格式。

注意:官方提供多种layout,具体可以点进time.Layout去看,推荐使用time包下的【常量名】来代表格式,比如你想要只精确到日的格式,那就选time.DateOnly作为layout;如果自定义格式作为layout,那么时间必须是指向"2006-01-02 15:04:05"

将string扫描成time

time.Parse(layout,"2023-02-09 15:22:12")

将time格式化为string

time.Format(layout,"2023-02-09 15:22:12")

time操作函数

获取当前时间的后一段时间,用add函数,传入时间间隔单位

t.add(time.Hour * 24)		//后1天
t.add(time.Minute * 7)		//后7分钟
t.add(time.Second * (-8))	//前8秒

时间比较

分别用Before、After、Equal去比较时间,Sub函数用于求两者时间间隔,以下是一个简单实践:

//用for循环遍历一个时间段
for current := start; current.Before(end) == true || current.Equal(end); current = current.Add(time.Hour * 24) {
		temString := current.Format(myLayout) //转为string
		fmt.Println(temString)
	}

HTTP代理设置

需求:使用代理服务器去给目标地址发请求,比如爬虫的时候使用代理IP

实现思路:使用http.Client类型创建一个HTTP客户端,然后通过http.Transport类型设置代理服务器,并将其传递给HTTP客户端即可。最后,使用client对象发送HTTP请求即可完成代理访问。

//设置代理IP
proxy := func(_ *http.Request) (*url.URL, error) {
    return url.Parse("代理地址")
}

//设置传输对象
transport := &http.Transport{
    Proxy: proxy,
}

//创建client
client := &http.Client{
    Transport: transport,
}

resp, err := client.Get("http://www.example.com")