1.Go时间模块学习

本文详细介绍Go语言中的time模块使用方法,包括当前时间获取、时间戳操作、时间间隔处理、时间加减运算、定时器应用、时间格式化及代码执行耗时计算。通过实例展示如何在Go程序中高效管理时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}

分享我在践行的理念: 少既是多, 慢既是块, 理解的多了记忆的就少了; 共勉☺

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值