golang time包和日期函数

打印 上一主题 下一主题

主题 945|帖子 945|积分 2835

1.简介

在程序中日期和时间是我们经常会用到的,在go中time包提供了时间的显示和测量函数。
2.获取当前时间 

通过time.Now()函数获取当前时间对象,然后获取时间对象的年月日时分秒等值。
  1.     now := time.Now()
  2.         fmt.Printf("now=%v type=%T\n", now, now)
  3.     fmt.Println("年:", now.Year())
  4.         fmt.Println("月:", int(now.Month()))
  5.         fmt.Println("月:", now.Month())
  6.         fmt.Println("日:", now.Day())
  7.         fmt.Println("时:", now.Hour())
  8.         fmt.Println("分:", now.Minute())
  9.         fmt.Println("秒:", now.Second())
复制代码
结果:注意now.Month() 返回的是March ,int(now.Month())返回的是阿拉伯数字3.
  1. now=2025-03-14 16:45:06.0905758 +0800 CST m=+0.002147901 type=time.Time
  2. 年: 2025
  3. 月: 3
  4. 月: March
  5. 日: 14
  6. 时: 16
  7. 分: 45
  8. 秒: 6
复制代码
3.格式化日期

方法一:%02d表示宽度为2,如果宽度不足2就补上0.
  1.     now := time.Now()
  2.         timeFormat := fmt.Sprintf("%d-%02d-%02d %02d:%02d:%02d\n", now.Year(), now.Month(),                     now.Day(), now.Hour(), now.Minute(), now.Second())
  3.         fmt.Println(timeFormat) //2025-03-14 17:41:57
复制代码
方法二:Format方法格式化输出日期字符串
  1.     now := time.Now()   
  2.     fmt.Println(now.Format("2006-01-02 03:04:05")) //2025-03-14 05:46:50
  3.         fmt.Println(now.Format("2006/01/02 03:04:05")) //2025/03/14 05:46:50
  4.         fmt.Println(now.Format("03:04:05"))            //05:46:50
  5.         fmt.Println(now.Format("2006-01-02 15:04:05")) //2025-03-14 17:46:50
复制代码
注意:2006年1月2好15点04分为格式模板,传言时golang出生的日子。
24小时制:15:04:05
12小时制:03:04:05
4.获取当前的时间戳

时间戳时字1970年1月1日(08:00:00GMT)至当前时间的总毫秒数。
  1.     now := time.Now()
  2.         //获取当前时间戳
  3.         fmt.Println(now.Unix())      //秒  1741946106
  4.         fmt.Println(now.UnixMilli()) //毫秒  1741946106150
  5.         fmt.Println(now.UnixMicro()) //微秒  1741946106150703
  6.         fmt.Println(now.UnixNano())  //纳秒  1741946106150703600
复制代码
5.把指定日期转换成时间戳

  1. //        指定日期转时间戳
  2.         time1 := "2024-02-02 15:02:03"  //指定字符串
  3.         timeTemPlate := "2006-01-02 15:04:05" //转换模板
  4.         t, _ := time.ParseInLocation(timeTemPlate, time1, time.Local)
  5.         fmt.Println(t.Unix()) //1706857323
复制代码
6.把时间戳转换成日期

  1.         var sec int64 = 1741924654
  2.         sectime := time.Unix(sec, 0)                       //秒转日期对象,第二个参数写0
  3.         fmt.Println(sectime.Format("2006/01/02 03:04:05")) //2025/03/14 11:57:34
  4.         var nsec int64 = 1741946106150703600
  5.         nsecTime := time.Unix(0, nsec)//纳秒转日期对象,第一个参数写0
  6.         fmt.Println(nsecTime.Format("2006/01/02 03:04:05")) //2025/03/14 05:55:06
复制代码
7.时间戳操作函数

  1.     //add 我们在日常的编程过程中可能会遇到要求时间+时间间隔后的需求,go语言提供了add方法
  2.         now := time.Now()
  3.         later := now.Add(time.Hour * 24)
  4.         fmt.Printf("当前时间%v号,24小时后的时间%v号\n", now.Day(), later.Day()) //当前时间14号,    24小时后的时间15号
  5.         //求两个时间之间的差
  6.         fmt.Println(later.Sub(now))
  7.         //判断连个时间是否相同,会考虑时区的影响,因此不同时区标准的时间也可以正确的比较。
  8.         //本方法和用t==u不同,这种方法还会比较地点和时区信息。
  9.         fmt.Println(later.Equal(now))
  10.         //判断是否在该时间点之前,bool
  11.         fmt.Println(later.Before(now))
  12.         //判断是否在该时间点之后,bool
  13.         fmt.Println(later.After(now))
复制代码
8.定时器 

方式一:利用time.NewTicker(时间间隔)来设置定时器
  1.     ticker := time.NewTicker(time.Millisecond * 100) //0.1秒执行一次
  2.         n := 0
  3.         for i := range ticker.C {
  4.                 fmt.Println(i)
  5.                 n++
  6.                 if n > 3 {
  7.                         ticker.Stop()
  8.                         break
  9.                 }
  10.         }
  11.         fmt.Println("结束了")
复制代码
结果:
  1. 2025-03-15 16:15:09.8342347 +0800 CST m=+0.107599401
  2. 2025-03-15 16:15:09.9436426 +0800 CST m=+0.217007301
  3. 2025-03-15 16:15:10.0378554 +0800 CST m=+0.311220101
  4. 2025-03-15 16:15:10.13826 +0800 CST m=+0.411624701
  5. 结束了
复制代码
方式二:time.Sleep(time.Second)来实现定时器
  1.     n := 0
  2.         for {
  3.                 n++
  4.                 fmt.Println("执行定时任务")
  5.                 time.Sleep(time.Second)//1秒执行一次
  6.                 if n > 5 {
  7.                         break
  8.                 }
  9.         }
  10.         fmt.Println("结束了")
复制代码
结果:
  1. 执行定时任务
  2. 执行定时任务
  3. 执行定时任务
  4. 执行定时任务
  5. 执行定时任务
  6. 执行定时任务
  7. 结束了
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

耶耶耶耶耶

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表