设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间00 现在时间00 缓存数据 对自己狠一点,逼自己努力,再过几年你将会感谢今天发狠的自己、恨透今天懒惰自卑的自己。晚安!

对自己狠一点,逼自己努力,再过几年你将会感谢今天发狠的自己、恨透今天懒惰自卑的自己。晚安!

查看: 1782|回复: 4

一文带你了解Go语言中time包的时间常用操作

[复制链接]

  离线 

TA的专栏

  • 打卡等级:即来则安
  • 打卡总天数:22
  • 打卡月天数:0
  • 打卡总奖励:288
  • 最近打卡:2025-07-08 07:10:04
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
390
主题
358
精华
0
金钱
1432
积分
796
注册时间
2023-2-10
最后登录
2025-7-8

发表于 2023-4-16 16:46:28 | 显示全部楼层 |阅读模式
前言

在日常开发中,我们避免不了时间的使用,我们可能需要获取当前时间,然后格式化保存,也可能需要在时间类型与字符串类型之间相互转换等。本文将会对
  1. Go
复制代码
  1. time
复制代码
包里面的常用函数和方法进行介绍。

Now():获取当前本地的时间
  1. import (
  2.     "fmt"
  3.     "time"
  4. )

  5. func main() {
  6.     now := time.Now()
  7.     fmt.Println(now) // 2022-12-03 21:06:16.1658077 +0800 CST m=+5.936223001
  8. }
复制代码
  1. Now()
复制代码
函数返回的是一个
  1. time
复制代码
包内置的一个结构体
  1. Time
复制代码


获取具体时间单位的值(yeah、month、day ······)

根据
  1. Now()
复制代码
的返回的
  1. Time
复制代码
结构体,我们通过其方法可以获取到具体的时间单位的值,例如 年、月、日等等。
  1. import (
  2.     "fmt"
  3.     "time"
  4. )

  5. func main() {
  6.     now := time.Now()
  7.     fmt.Println("年:", now.Year())
  8.     fmt.Println("月:", now.Month())
  9.     fmt.Println("数字格式的月:", int(now.Month()))
  10.     fmt.Println("日:", now.Day())
  11.     fmt.Println("时:", now.Hour())
  12.     fmt.Println("分:", now.Minute())
  13.     fmt.Println("秒:", now.Second())
  14. }
复制代码
通过
  1. Time
复制代码
结构体的
  1. Year()
复制代码
  1. Month()
复制代码
  1. Day()
复制代码
  1. Hour()
复制代码
  1. Minute()
复制代码
  1. Second()
复制代码
这些方法,可以获取到当前时间的 年、月、日、时、分、秒的值。

时间格式化

通过
  1. Time
复制代码
结构体的
  1. Format(layout string)
复制代码
方法可以将时间转换成指定格式并以
  1. string
复制代码
类型返回。
  1. import (
  2.     "fmt"
  3.     "time"
  4. )

  5. func main() {
  6.     now := time.Now()
  7.     format1 := now.Format("2006-01-02 15:04:05")
  8.     format2 := now.Format("2006/01/02 15:04:05")
  9.     format3 := now.Format("2006-01-02")
  10.     format4 := now.Format("2006/01/02")
  11.     format5 := now.Format("15:04:05")

  12.     fmt.Println(format1) // 2022-12-03 22:27:56
  13.     fmt.Println(format2) // 2022/12/03 22:27:56
  14.     fmt.Println(format3) // 2022-12-03
  15.     fmt.Println(format4) // 2022/12/03
  16.     fmt.Println(format5) // 22:27:56
  17. }
复制代码
其中
  1. layout
复制代码
格式参数,
  1. Go
复制代码
强制我们使用
  1. 2006-01-02 15:04:05
复制代码
这个固定的值,连接符如
  1. -
复制代码
可以改变,但是数字不能变,否则时间会对不上。

获取秒、微秒、毫秒、纳秒
  1. import (
  2.     "fmt"
  3.     "time"
  4. )

  5. func main() {
  6.     now := time.Now()
  7.     // 获取秒
  8.     fmt.Println(now.Unix()) // 1670078476
  9.     // 获取毫秒
  10.     fmt.Println(now.UnixMilli()) // 1670079987508082
  11.     // 获取微秒
  12.     fmt.Println(now.UnixMicro()) // 1670079987508082
  13.     // 获取纳秒
  14.     fmt.Println(now.UnixNano()) // 1670079987508082500
  15. }
复制代码
通过
  1. time
复制代码
结构体的
  1. Unix()
复制代码
  1. UnixMilli()
复制代码
  1. UnixMicro()
复制代码
  1. UnixNano()
复制代码
方法可以获取对应是秒时间戳、毫秒时间戳、微秒时间戳和纳秒时间戳。

通过指定年月日等参数获取时间
  1. import (
  2.     "fmt"
  3.     "time"
  4. )

  5. func main() {
  6.     date := time.Date(2002, 12, 03, 12, 12, 12, 0, time.UTC)
  7.     fmt.Println(date) // 2022-12-03 12:12:12 +0000 UTC
  8. }
复制代码
通过
  1. Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time
复制代码
函数,传入指定的年月日等参数,获取指定是时间变量。

时间戳与时间的转换
  1. import (
  2.     "fmt"
  3.     "time"
  4. )

  5. func main() {
  6.     now := time.Now()

  7.     time1 := time.Unix(now.Unix(), 0).Format("2006-01-02 15:04:05")
  8.     time2 := time.UnixMilli(now.UnixMilli()).Format("2006-01-02 15:04:05")
  9.     time3 := time.UnixMicro(now.UnixMicro()).Format("2006-01-02 15:04:05")
  10.     fmt.Println(time1) // 2022-12-03 23:03:33
  11.     fmt.Println(time2) // 2022-12-03 23:03:33
  12.     fmt.Println(time3) // 2022-12-03 23:03:33
  13. }
复制代码
通过
  1. Unix()
复制代码
  1. UnixMilli()
复制代码
、和
  1. UnixMicro()
复制代码
方法可以将对应时间戳转换成当前时间并格式化。

字符串转时间格式
  1. import (
  2.    "fmt"
  3.    "time"
  4. )

  5. func main() {
  6.    t1, err := time.Parse("2006-01-02 15:04:05", "2022-12-03 13:00:00")
  7.    if err != nil {
  8.       fmt.Println("err: ", err)
  9.       return
  10.    }
  11.    fmt.Println(t1) // 2022-12-03 13:00:00 +0000 UTC

  12.    t2, err := time.Parse("2006-01-02", "2022-12-03")
  13.    if err != nil {
  14.       fmt.Println("err: ", err)
  15.       return
  16.    }
  17.    fmt.Println(t2) // 2022-12-03 00:00:00 +0000 UTC

  18.    t3, err := time.Parse("15:04:05", "13:00:00")
  19.    if err != nil {
  20.       fmt.Println("err: ", err)
  21.       return
  22.    }
  23.    fmt.Println(t3) // 0000-01-01 13:00:00 +0000 UTC
  24. }
复制代码
通过
  1. Parse(layout, value string) (Time, error)
复制代码
函数将字符串转成
  1. time
复制代码
时间。
  1. layout
复制代码
格式必须与
  1. value
复制代码
的格式相对应,否则会返回
  1. error
复制代码


时间的添加和减少操作
  1. import (
  2.     "fmt"
  3.     "time"
  4. )

  5. func main() {
  6.     now := time.Now()
  7.     newTime := now.Add(time.Hour * 1)
  8.     fmt.Println(newTime.Format("2006-01-02 15:04:05"))
  9. }
复制代码

  • 通过
    1. (t Time) Add(d Duration) Time
    复制代码
    方法,可以对时间进行添加或减少操作,传入的参数是正数表示添加,负数表示减少。添加单位有天、小时、分钟等。
    1. Duration
    复制代码
    表示所添加的时间,
    1. time.Hour
    复制代码
    表示小时单位,除此之外还有
    1. time.Minute
    复制代码
    分钟单位、
    1. time.Second
    复制代码
    秒单位等。

计算两个时间的时间差
  1. import (
  2.     "fmt"
  3.     "time"
  4. )

  5. func main() {
  6.     now := time.Now()
  7.     newTime := now.Add(time.Hour * 1)
  8.     fmt.Println(newTime.Sub(now)) // 1h0m0s
  9. }
复制代码
通过
  1. Sub(u Time) Duration
复制代码
方法可以计算两个时间的时间差。

计算当前时间与某个时间的时间差
  1. import (
  2.     "fmt"
  3.     "time"
  4. )

  5. func main() {
  6.     beforeTime := time.Now().Add(time.Hour * -1)
  7.     fmt.Println(time.Since(beforeTime)) // 1h0m0s
  8. }
复制代码
通过
  1. Add(d Duration) Time
复制代码
方法将当前时间减少一小时,然后通过
  1. Since(t Time) Duration
复制代码
函数比较当前时间与其他时间的时间差。

判断当前时间是否在某个时间之前
  1. import (
  2.     "fmt"
  3.     "time"
  4. )

  5. func main() {
  6.     now := time.Now()
  7.     date := time.Date(2022, 12, 03, 12, 12, 12, 0, time.UTC)
  8.     fmt.Println(now.Before(date)) // false
  9. }
复制代码
通过
  1. Before(u Time) bool
复制代码
#方法,判断当前的时间是否在传入的时间之前,返回值为布尔值,
  1. true
复制代码
为是,
  1. false
复制代码
为否。

判断当前时间是否在某个时间之后
  1. import (
  2.     "fmt"
  3.     "time"
  4. )

  5. func main() {
  6.     now := time.Now()
  7.     date := time.Date(2022, 12, 03, 12, 12, 12, 0, time.UTC)
  8.     fmt.Println(now.After(date)) // true
  9. }
复制代码
通过
  1. After(u Time) bool
复制代码
方法,判断当前的时间是否在传入的时间之后,返回值为布尔值,
  1. true
复制代码
为是,
  1. false
复制代码
为否。

小结

本文介绍了如果获取当前时间、在当前时间的前提下获取具体的年月日时分秒、时间格式化和时间戳与时间的转换以及计算时间差的方法等。掌握了这些函数和方法的使用,应对开发中 时间操作的场景不成问题。
到此这篇关于一文带你了解Go语言中time包的时间常用操作的文章就介绍到这了,更多相关Go time包常用操作内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

  • 打卡等级:即来则安
  • 打卡总天数:19
  • 打卡月天数:0
  • 打卡总奖励:254
  • 最近打卡:2025-07-01 06:18:15
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
296
积分
40
注册时间
2023-3-25
最后登录
2025-7-1

发表于 2023-6-19 20:28:57 | 显示全部楼层
看看,学习学习~~~~
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
17
积分
14
注册时间
2022-12-28
最后登录
2022-12-28

发表于 2023-10-25 23:09:28 | 显示全部楼层
感谢分享~~~~学习学习~~~~~
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
14
积分
8
注册时间
2022-12-26
最后登录
2022-12-26

发表于 2024-11-22 08:19:15 | 显示全部楼层
感谢楼主分享。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
11
积分
2
注册时间
2023-10-27
最后登录
2023-10-27

发表于 2025-4-23 03:55:47 | 显示全部楼层
感谢楼主,顶。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼
4楼
5楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表