Go语言time包的使用
时间类型
time.Time类型表示时间。
1、时间类型
1 2 3 4 5 6 7 8 9 10 11 12 13 | func timeDemo() { now := time.Now() fmt.Println(now) fmt.Println(now.Format( "2006-01-02 15:04:05" )) 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) } |
输出结果:
1 2 3 | 2021-07-29 15:48:56.927489 +0800 CST m=+0.000069188 2021-07-29 15:48:56 2021,07,29 15:48:56 |
2、字符串类型转time
1 2 3 4 5 6 | s4 := "1999年10月19日" //字符串 t4, err := time.Parse( "2006年01月02日" , s4) if err != nil { fmt.Println( "err" , err) } fmt.Println(t4) |
输出结果:
1 | 1999-10-19 00:00:00 +0000 UTC |
3、时间戳
时间戳是自1970年1月1日(08:00:00GMT)至当前时间的总毫秒数。它也被称为Unix时间戳(UnixTimestamp)。
1 2 3 4 5 6 | //时间戳 func timestampDemo() { now := time.Now() timestamp := now.Unix() fmt.Println(timestamp) } |
输出结果:
1 | 1627545363 |
time.Unix()函数将时间戳转为时间格式。
1 2 3 4 5 6 7 8 9 10 11 12 13 | func timestampDemo2(timestamp int64) { now := time.Now() timestamp := now.Unix() timeObj := time.Unix(timestamp, 0) //将时间戳转为时间格式 fmt.Println(timeObj) //2021-07-29 15:57:15 +0800 CST year := timeObj.Year() //年 month := timeObj.Month() //月 day := timeObj.Day() //日 hour := timeObj.Hour() //小时 minute := timeObj.Minute() //分钟 second := timeObj.Second() //秒 fmt.Printf( "%d-%02d-%02d %02d:%02d:%02d\n" , year, month, day, hour, minute, second) //2021-07-29 15:57:15 } |
输出结果:
1 2 | 2021-07-29 15:57:15 +0800 CST 2021-07-29 15:57:15 |
4、时间间隔
Duration类型代表两个时间点之间经过的时间,以纳秒为单位。
1 2 3 4 5 6 7 8 | const ( Nanosecond Duration = 1 Microsecond = 1000 * Nanosecond Millisecond = 1000 * Microsecond Second = 1000 * Millisecond Minute = 60 * Second Hour = 60 * Minute ) |
5、时间加时间间隔
语法:
1 | func (t Time) Add(d Duration) Time |
示例:计算1小时后及1小时前时间
1 2 3 4 5 6 7 | func main() { now := time.Now() later := now.Add(time.Hour) fmt.Println(later) before := now.Add(-time.Hour) fmt.Println(before) } |
输出结果:
1 2 | 2021-07-29 17:01:50.239301 +0800 CST m=+3600.000080244 2021-07-29 15:01:50.239301 +0800 CST m=-3599.999919756 |
6、定时器
time.Tick(时间间隔)来设置定时器。
1 2 3 4 5 6 7 | //定时器,每隔1s打印下i func tickDemo() { ticker := time.Tick(time.Second) for i := range ticker{ fmt.Println(i) } } |
输出结果:
1 2 3 4 | 2021-07-29 16:03:16.519927 +0800 CST m=+1.003226534 2021-07-29 16:03:17.516987 +0800 CST m=+2.000315947 2021-07-29 16:03:18.516788 +0800 CST m=+3.000145536 .... |
7、睡眠sleep
1 2 | time.Sleep(3 *time.Second) fmt.Println( "睡眠3s" ) |
睡眠[1-10随机数]
1 2 3 4 5 6 7 | func main() { rand.Seed(time.Now().UnixNano()) randNum := rand.Intn(10) + 1 //int类型,需要转换 fmt.Println(randNum) time.Sleep(time.Duration(randNum) * time.Second) fmt.Printf( "睡了%d秒\n" , randNum) } |
输出结果:
1 2 | 6 睡了6秒 |
8、时间格式化
Go语言中格式化时间模板不是常见的Y-m-d H:M:S而是使用Go的诞生时间2006年1月2号15点04分(记忆口诀为2006 1 2 3 4 5)。
1 2 3 4 5 6 7 8 9 | //时间格式化 func formatDemo() { now := time.Now() // 格式化的模板为Go的出生时间2006年1月2号15点04分 fmt.Println(now.Format( "2006-01-02 15:04:05" )) //2019-04-24 18:37:59 fmt.Println(now.Format( "2006/01/02 15:04" )) fmt.Println(now.Format( "15:04 2006/01/02" )) fmt.Println(now.Format( "2006/01/02" )) } |
输出结果:
1 2 3 4 | 2021-07-29 16:12:52 2021/07/29 16:12 16:12 2021/07/29 2021/07/29 |
9、时间比较
Equal
判断时间是否相等,会有时区影响。
1 | func (t Time) Equal(u Time) bool |
Before
1 | func (t Time) Before(u Time) bool |
如果t代表的时间点在u之前,返回真;否则返回假。
After
1 | func (t Time) After(u Time) bool |
如果t代表的时间点在u之后,返回真;否则返回假。
分类:
Golang
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2016-07-29 ant简述
2016-07-29 Docker镜像的获取与删除
2016-07-29 ubuntu14.04安装Docker
2016-07-29 简述Docker镜像、容器、仓库概念
2014-07-29 POJ3414—Pots(bfs加回溯)