文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

go语言中time包的函数有哪些

2023-07-06 04:25

关注

这篇“go语言中time包的函数有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go语言中time包的函数有哪些”文章吧。

时间类型

Go语言中,time.Time类型表示时间。我们可以通过time.Now函数获取当前时间的对象,然后从时间对象中获取到年,月,日,时,分,秒等信息,代码如下

// timeDemo 时间对象的年月日时分秒func timeDemo() {now := time.Now() // 获取当前时间fmt.Printf("current time:%v\n", now)year := now.Year()     // 年month := now.Month()   // 月day := now.Day()       // 日hour := now.Hour()     // 小时minute := now.Minute() // 分钟second := now.Second() // 秒fmt.Println(year, month, day, hour, minute, second)}

Location和time zone

Go 语言中使用 location 来映射具体的时区。时区(Time Zone)是根据世界各国家与地区不同的经度而划分的时间定义,全球共分为24个时区。中国差不多跨5个时区,但为了使用方便只用东八时区的标准时即北京时间为准。

下面的示例代码中使用beijing来表示东八区8小时的偏移量,其中time.FixedZone和time.LoadLocation`这两个函数则是用来获取location信息。

// timezoneDemo 时区示例func timezoneDemo() {// 中国没有夏令时,使用一个固定的8小时的UTC时差。// 对于很多其他国家需要考虑夏令时。secondsEastOfUTC := int((8 * time.Hour).Seconds())// FixedZone 返回始终使用给定区域名称和偏移量(UTC 以东秒)的 Location。beijing := time.FixedZone("Beijing Time", secondsEastOfUTC)// 如果当前系统有时区数据库,则可以加载一个位置得到对应的时区// 例如,加载纽约所在的时区newYork, err := time.LoadLocation("America/New_York") // UTC-05:00if err != nil {fmt.Println("load America/New_York location failed", err)return}fmt.Println()// 加载上海所在的时区//shanghai, err := time.LoadLocation("Asia/Shanghai") // UTC+08:00// 加载东京所在的时区//tokyo, err := time.LoadLocation("Asia/Tokyo") // UTC+09:00// 创建时间对象需要指定位置。常用的位置是 time.Local(当地时间) 和 time.UTC(UTC时间)。//timeInLocal := time.Date(2009, 1, 1, 20, 0, 0, 0, time.Local)  // 系统本地时间timeInUTC := time.Date(2009, 1, 1, 12, 0, 0, 0, time.UTC)sameTimeInBeijing := time.Date(2009, 1, 1, 20, 0, 0, 0, beijing)sameTimeInNewYork := time.Date(2009, 1, 1, 7, 0, 0, 0, newYork)// 北京时间(东八区)比UTC早8小时,所以上面两个时间看似差了8小时,但表示的是同一个时间timesAreEqual := timeInUTC.Equal(sameTimeInBeijing)fmt.Println(timesAreEqual)// 纽约(西五区)比UTC晚5小时,所以上面两个时间看似差了5小时,但表示的是同一个时间timesAreEqual = timeInUTC.Equal(sameTimeInNewYork)fmt.Println(timesAreEqual)}

时间间隔

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

Add

func main() {now := time.Now()later := now.Add(time.Hour) // 当前时间加1小时后的时间fmt.Println(later)}

sub

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

func (t Time) Sub(u Time) Duration

Before

如果t代表的时间点在u之前,返回真;否则返回假

func (t Time) Before(u Time) bool

After

如果t代表的时间点在u之后,返回真;否则返回假。

func (t Time) After(u Time) bool

定时器

使用time.Tick(时间间隔)来设置定时器,定时器的本质上是一个通道(channel)。

unc tickDemo() {ticker := time.Tick(time.Second) //定义一个1秒间隔的定时器for i := range ticker {fmt.Println(i)//每秒都会执行的任务}}

时间格式化

time.Format函数能够将一个时间对象格式化输出为指定布局的文本表示形式,需要注意的是 Go 语言中时间格式化的布局不是常见的Y-m-d H:M:S,而是使用 2006-01-02 15:04:05.000(记忆口诀为2006 1 2 3 4 5)。

其中:

2006:年(Y)
01:月(m)
02:日(d)
15:时(H)
04:分(M)
05:秒(S)`

// formatDemo 时间格式化func formatDemo() {now := time.Now()// 格式化的模板为 2006-01-02 15:04:05// 24小时制fmt.Println(now.Format("2006-01-02 15:04:05.000 Mon Jan"))// 12小时制fmt.Println(now.Format("2006-01-02 03:04:05.000 PM Mon Jan"))// 小数点后写0,因为有3个0所以格式化输出的结果也保留3位小数fmt.Println(now.Format("2006/01/02 15:04:05.000")) // 2022/02/27 00:10:42.960// 小数点后写9,会省略末尾可能出现的0fmt.Println(now.Format("2006/01/02 15:04:05.999")) // 2022/02/27 00:10:42.96// 只格式化时分秒部分fmt.Println(now.Format("15:04:05"))// 只格式化日期部分fmt.Println(now.Format("2006.01.02"))}

时间格式化的时间

对于从文本的时间表示中解析出时间对象,time包中提供了time.Parse和time.ParseInLocation两个函数。

其中time.Parse在解析时不需要额外指定时区信息。

// parseDemo 指定时区解析时间func parseDemo() {// 在没有时区指示符的情况下,time.Parse 返回UTC时间timeObj, err := time.Parse("2006/01/02 15:04:05", "2022/10/05 11:25:20")if err != nil {fmt.Println(err)return}fmt.Println(timeObj) // 2022-10-05 11:25:20 +0000 UTC// 在有时区指示符的情况下,time.Parse 返回对应时区的时间表示// RFC3339     = "2006-01-02T15:04:05Z07:00"timeObj, err = time.Parse(time.RFC3339, "2022-10-05T11:25:20+08:00")if err != nil {fmt.Println(err)return}fmt.Println(timeObj) // 2022-10-05 11:25:20 +0800 CST

以上就是关于“go语言中time包的函数有哪些”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯