time包
time.Time类型表示时间。我们可以通过time.Now()函数获取当前的时间对象,然后获取时间对象的年月日时分秒等信息。
go 的time.now就是你当前所处时区的时间
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println(now) //获取当前的时间
fmt.Println(now.Year()) //获取当前时间的年份
fmt.Println(now.Month()) //获取当前时间的月份
fmt.Println(now.Date()) //获取当前时间的日子
fmt.Println(now.Hour()) //获取当前时间的时
fmt.Println(now.Minute()) //获取当前时间的分
fmt.Println(now.Second()) //获取当前时间的秒
}
时间戳
时间戳是指从1970年1月1日(08:00:00GMT)至今时间的总毫秒数。它也被称为Unix时间戳(UnixTimeStamp).
基于时间对象获取时间戳的示例代码如下
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println(now.Unix()) //获取时间戳
fmt.Println(now.UnixNano()) //获取精确时间戳精确到纳秒
}
时间戳转换为时间格式
指定一个时间戳,把时间戳解析成人们能看懂的格式
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println(now.Unix()) //获取时间戳
fmt.Println(now.UnixNano()) //获取精确时间戳精确到纳秒
//将时间戳转换为时间格式
ret := time.Unix(1674439983, 0) //0表示标志位
fmt.Println(ret.Year())
fmt.Println(ret.Date())
}
时间间隔
Duration类型代表两个时间点之间经过的时间,以纳秒为单位。可表示的最长时间段大约290年。time包中定义的时间间隔常量如下:
const (
Nanosecond Duration = 1
Microsecond = 1000 = Microsecond
Millisecond = 1000 = Microsecond
Second = 1000 = Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)
例如:time.Duration表示1纳秒,time.Second表示1秒
例如表示1秒钟
//时间间隔
fmt.Println(now.Second())
时间计算
time.Add
某个时间增加一段时间
//now + 24 小时
fmt.Println(now.Add(24 * time.Hour))
time.Sub
求两个时间之间的差值
//当前时间减某一个时间点的差值
fmt.Println(now.Sub(ret))
time.Equal
判断两个hi就是否相同,会考虑时区的影响,因此不同时区标准的时间也可以正确比较。本方法和用t==u不同,这种方法还会比较地点和时区信息
//equal
fmt.Println(now.Equal(ret))
time.before
如果t代表的时间点在u之前,返回真;否则返回假
//before
fmt.Println(now.Before(ret)) t:now u:ret
time.After
如果t表示的时间点在u之后,返回真;否则返回假
//after
fmt.Println(now.After(ret))
定时器
使用time.Tick(时间间隔)来设置定时器,定时器的本质上是一个通道(channnel)
package main
import (
"fmt"
"time"
)
func main() {
//定时器
timer := time.Tick(time.Second) //一秒钟给你一个值,把当前的时间给你
//一秒钟执行一次
for t := range timer {
fmt.Println(t)
}
}
时间格式化
时间类型有一个自带的方法Format进行格式化,需要注意的是Go语言中格式化时间模板不是常见的Y-m-d H:M:S 而是使用Go的诞生时间2006年1月2号15点04分(记忆口诀为2006 1 2 3 4 5)
//Y m d H M S
//2006 1 2 3 4 5 2006年的1月2号下午的3点4分05秒
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
//2023/01/23
fmt.Println(now.Format("2006-01-02"))
//2023/01/23 11:58:02 24小时制
fmt.Println(now.Format("2006/01/02 15:04:05"))
//2023/01/23 13:00:04 12小时制PM
fmt.Println(now.Format("2006/01/02 03:04:05 PM"))
//2023/01/23 01:00:05 12小时制AM
fmt.Println(now.Format("2006/01/02 03:04:05 AM"))
//精确到毫秒5后面加个000就行
fmt.Println(now.Format("2006/01/02 15:04:05.000"))
}
按照但对于的格式解析字符串类型的时间
timeObj, err := time.Parse("2006-01-02", "2023-01-23")
if err != nil {
fmt.Printf("parse time err ,err:%v", err)
return
}
fmt.Println(timeObj)
fmt.Println(timeObj.Unix())
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码