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

 找回密码
 立即注册
缓存时间23 现在时间23 缓存数据 荣耀也罢,屈辱也罢,都要以平和的心态去面对,少一些无奈与感慨,多一份从容和淡然。晚安!

荣耀也罢,屈辱也罢,都要以平和的心态去面对,少一些无奈与感慨,多一份从容和淡然。晚安!

查看: 1005|回复: 3

go语言中time包的各种函数总结

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:226
  • 打卡月天数:1
  • 打卡总奖励:3235
  • 最近打卡:2025-12-13 21:57:44
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
426
主题
392
精华
0
金钱
4528
积分
871
注册时间
2023-1-7
最后登录
2025-12-13

发表于 2023-4-16 16:15:23 来自手机 | 显示全部楼层 |阅读模式
前言

在我们开发的过程中,每个项目都需要时间这一类的函数,此时,对time这个包的研究深度就显得尤为重要,现在,对time包中的各种函数做出一个总结,加深一些记忆,

时间类型

Go语言中,time.Time类型表示时间。我们可以通过time.Now函数获取当前时间的对象,然后从时间对象中获取到年,月,日,时,分,秒等信息,代码如下
  1. // timeDemo 时间对象的年月日时分秒
  2. func timeDemo() {
  3.         now := time.Now() // 获取当前时间
  4.         fmt.Printf("current time:%v\n", now)

  5.         year := now.Year()     // 年
  6.         month := now.Month()   // 月
  7.         day := now.Day()       // 日
  8.         hour := now.Hour()     // 小时
  9.         minute := now.Minute() // 分钟
  10.         second := now.Second() // 秒
  11.         fmt.Println(year, month, day, hour, minute, second)
  12. }
复制代码
Location和time zone

Go 语言中使用 location 来映射具体的时区。时区(Time Zone)是根据世界各国家与地区不同的经度而划分的时间定义,全球共分为24个时区。中国差不多跨5个时区,但为了使用方便只用东八时区的标准时即北京时间为准。
下面的示例代码中使用beijing来表示东八区8小时的偏移量,其中time.FixedZone和time.LoadLocation`这两个函数则是用来获取location信息。
  1. // timezoneDemo 时区示例
  2. func timezoneDemo() {
  3.         // 中国没有夏令时,使用一个固定的8小时的UTC时差。
  4.         // 对于很多其他国家需要考虑夏令时。
  5.         secondsEastOfUTC := int((8 * time.Hour).Seconds())
  6.         // FixedZone 返回始终使用给定区域名称和偏移量(UTC 以东秒)的 Location。
  7.         beijing := time.FixedZone("Beijing Time", secondsEastOfUTC)

  8.         // 如果当前系统有时区数据库,则可以加载一个位置得到对应的时区
  9.         // 例如,加载纽约所在的时区
  10.         newYork, err := time.LoadLocation("America/New_York") // UTC-05:00
  11.         if err != nil {
  12.                 fmt.Println("load America/New_York location failed", err)
  13.                 return
  14.         }
  15.         fmt.Println()
  16.         // 加载上海所在的时区
  17.         //shanghai, err := time.LoadLocation("Asia/Shanghai") // UTC+08:00
  18.         // 加载东京所在的时区
  19.         //tokyo, err := time.LoadLocation("Asia/Tokyo") // UTC+09:00

  20.         // 创建时间对象需要指定位置。常用的位置是 time.Local(当地时间) 和 time.UTC(UTC时间)。
  21.         //timeInLocal := time.Date(2009, 1, 1, 20, 0, 0, 0, time.Local)  // 系统本地时间
  22.         timeInUTC := time.Date(2009, 1, 1, 12, 0, 0, 0, time.UTC)
  23.         sameTimeInBeijing := time.Date(2009, 1, 1, 20, 0, 0, 0, beijing)
  24.         sameTimeInNewYork := time.Date(2009, 1, 1, 7, 0, 0, 0, newYork)

  25.         // 北京时间(东八区)比UTC早8小时,所以上面两个时间看似差了8小时,但表示的是同一个时间
  26.         timesAreEqual := timeInUTC.Equal(sameTimeInBeijing)
  27.         fmt.Println(timesAreEqual)

  28.         // 纽约(西五区)比UTC晚5小时,所以上面两个时间看似差了5小时,但表示的是同一个时间
  29.         timesAreEqual = timeInUTC.Equal(sameTimeInNewYork)
  30.         fmt.Println(timesAreEqual)
  31. }
复制代码
时间间隔

time.Duration是time包定义的一个类型,它代表两个时间点之间经过的时间,以纳秒为单位。time.Duration表示一段时间间隔,可表示的最长时间段大约290年。

Add
  1. func main() {
  2.         now := time.Now()
  3.         later := now.Add(time.Hour) // 当前时间加1小时后的时间
  4.         fmt.Println(later)
  5. }
复制代码
sub

返回一个时间段t-u。如果结果超出了Duration可以表示的最大值/最小值,将返回最大值/最小值。要获取时间点t-d(d为Duration),可以使用t.Add(-d)。
  1. func (t Time) Sub(u Time) Duration
复制代码
Before

如果t代表的时间点在u之前,返回真;否则返回假
  1. func (t Time) Before(u Time) bool
复制代码
After

如果t代表的时间点在u之后,返回真;否则返回假。
  1. func (t Time) After(u Time) bool
复制代码
定时器

使用time.Tick(时间间隔)来设置定时器,定时器的本质上是一个通道(channel)。
  1. unc tickDemo() {
  2.         ticker := time.Tick(time.Second) //定义一个1秒间隔的定时器
  3.         for i := range ticker {
  4.                 fmt.Println(i)//每秒都会执行的任务
  5.         }
  6. }
复制代码
时间格式化

time.Format函数能够将一个时间对象格式化输出为指定布局的文本表示形式,需要注意的是 Go 语言中时间格式化的布局不是常见的Y-m-d H:M:S,而是使用 2006-01-02 15:04:05.000(记忆口诀为2006 1 2 3 4 5)。
其中:
  1. 2006:年(Y)01:月(m)02:日(d)15:时(H)04:分(M)05:秒(S)`
复制代码
  1. // formatDemo 时间格式化
  2. func formatDemo() {
  3.         now := time.Now()
  4.         // 格式化的模板为 2006-01-02 15:04:05

  5.         // 24小时制
  6.         fmt.Println(now.Format("2006-01-02 15:04:05.000 Mon Jan"))
  7.         // 12小时制
  8.         fmt.Println(now.Format("2006-01-02 03:04:05.000 PM Mon Jan"))

  9.         // 小数点后写0,因为有3个0所以格式化输出的结果也保留3位小数
  10.         fmt.Println(now.Format("2006/01/02 15:04:05.000")) // 2022/02/27 00:10:42.960
  11.         // 小数点后写9,会省略末尾可能出现的0
  12.         fmt.Println(now.Format("2006/01/02 15:04:05.999")) // 2022/02/27 00:10:42.96

  13.         // 只格式化时分秒部分
  14.         fmt.Println(now.Format("15:04:05"))
  15.         // 只格式化日期部分
  16.         fmt.Println(now.Format("2006.01.02"))
  17. }
复制代码
时间格式化的时间

对于从文本的时间表示中解析出时间对象,time包中提供了time.Parse和time.ParseInLocation两个函数。
其中time.Parse在解析时不需要额外指定时区信息。
  1. // parseDemo 指定时区解析时间
  2. func parseDemo() {
  3.         // 在没有时区指示符的情况下,time.Parse 返回UTC时间
  4.         timeObj, err := time.Parse("2006/01/02 15:04:05", "2022/10/05 11:25:20")
  5.         if err != nil {
  6.                 fmt.Println(err)
  7.                 return
  8.         }
  9.         fmt.Println(timeObj) // 2022-10-05 11:25:20 +0000 UTC

  10.         // 在有时区指示符的情况下,time.Parse 返回对应时区的时间表示
  11.         // RFC3339     = "2006-01-02T15:04:05Z07:00"
  12.         timeObj, err = time.Parse(time.RFC3339, "2022-10-05T11:25:20+08:00")
  13.         if err != nil {
  14.                 fmt.Println(err)
  15.                 return
  16.         }
  17.         fmt.Println(timeObj) // 2022-10-05 11:25:20 +0800 CST
复制代码
总结

到此这篇关于go语言中time包的各种函数总结的文章就介绍到这了,更多相关go语言time包内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

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

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

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

发表于 2024-3-7 17:38:41 | 显示全部楼层
路过,支持一下
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

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

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

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

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

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

本版积分规则

1楼
2楼
3楼
4楼

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

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

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

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

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

Powered by Discuz! X3.5

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