golang中time的使用

简介: golang中time的使用

公众号merlinsea


  • 时间类型在开发中面临的常见问题
  • 获取当前时间
  • 字符串转时间
  • 时间类型之间的比较
  • 对时间类型进行格式化输出
  • 秒级时间戳/纳秒级时间戳转时间(时间戳是一个整数)
  • 对时间类型进行增减[自增1天,自增1个月等等]


// 当前计算机时间是 2022年11月15日 17:18
func main() {
  // 返回当前时间,注意此时返回的是 time.Time 类型
  now := time.Now()
  fmt.Println(now) // 2022-11-15 17:14:13.207215 +0800 CST m=+0.000094241
  // 当前时间戳,秒级
  fmt.Println(now.Unix()) //1668503653
  // 当前纳秒级时间戳
  fmt.Println(now.UnixNano()) //1668503653207215000
  // 当前纳秒级时间戳小数部分
  fmt.Println(now.Nanosecond()) //207215000
  // 返回日期,返回的是数字类型
  year, month, day := now.Date()
  fmt.Printf("year:%d, month:%d, day:%d\n", year, month, day) //year:2022, month:11, day:15
  // 年
  fmt.Println(now.Year()) // 2022
  // 月,返回的是英文月
  fmt.Println(now.Month()) //November
  // 日
  fmt.Println(now.Day()) // 15
  // 时分秒
  hour, minute, second := now.Clock()
  fmt.Printf("hour:%d, minute:%d, second:%d\n", hour, minute, second) //hour:17, minute:18, second:35
  // 时
  fmt.Println(now.Hour()) //17
  // 分
  fmt.Println(now.Minute()) //18
  // 秒
  fmt.Println(now.Second()) //35
  // 返回星期
  fmt.Println(now.Weekday()) //Tuesday
  //返回一年中对应的第几天
  fmt.Println(now.YearDay()) //319 , 2022年11月15日是2022年的第319天,第几天从1开始
  //返回时区
  fmt.Println(now.Location()) //Local
  //格式化时间 "2006代表年,01代表月,02代表日,15代表时,03代表月,04代表日"
  fmt.Println(now.Format("2006-01-02 15:03:04")) //2022-11-15 17:05:22
  fmt.Println(now.Format("2006-01-02"))          //2022-11-15
  fmt.Println(now.Format("15:03:04"))            //17:05:22
  fmt.Println(now.Format("2006/01/02 15:04"))    //2022/11/15 17:22
  fmt.Println(now.Format("15:04 2006/01/02"))    //17:22 2022/11/15
  fmt.Println(now.Format("2006-01"))             //2022-11
  fmt.Println(now.Format("20060102"))            //20221115
  // 秒级时间戳转时间类型,tm是time.Time类型
  tm := time.Unix(1668672132, 0)
  fmt.Printf("tm的类型是%T,tm的值是%v\n", tm, tm) //tm的类型是time.Time,tm的值是2022-11-17 16:02:12 +0800 CST
  // 将时间tm 按照 [年-月]的格式进行格式化
  tmStr := tm.Format("2006-01")
  fmt.Println(tmStr) // 2022-11
  // 将时间tm 按照 [年月日]的格式进行格式化
  tmStr = tm.Format("20060102")
  fmt.Println(tmStr) //20221117
  // 取下个月1号
  date := tm.AddDate(0, 1, -tm.Day()+1)
  fmt.Printf("date的类型是%T,date的值是%v\n", date, date) //date的类型是time.Time,date的值是2022-12-01 16:02:12 +0800 CST
  // string转time类型,要求str的格式必须和layout模版一摸一样
  str := "202201"
  // 解析出来的parse是年-月-日 时:分:秒类型的time类型
  parse, err := time.Parse("200601", str)
  if err != nil {
    fmt.Println("转换失败")
  } else {
    fmt.Printf("parse类型是%T,parse值是%v\n", parse, parse) //parse类型是time.Time,parse值是2022-01-01 00:00:00 +0000 UTC
  }
  // 时间类型新增1个月然后按照[年月]格式进行格式化
  format := parse.AddDate(0, 1, 0).Format("200601")
  fmt.Printf("format类型是%T,format值是%v\n", format, format) //format类型是string,format值是202202
  // time.Time时间类型的比较
  today := time.Now()
  yesterday := today.AddDate(0, 0, -1)
  tomorrow := today.AddDate(0, 0, 1)
  //今天 2022-12-01 20:11:08.6365 +0800 CST m=+0.000508634 是 昨天 2022-11-30 20:11:08.6365 +0800 CST的将来
  //今天 2022-12-01 20:11:08.6365 +0800 CST m=+0.000508634 是 明天 2022-12-02 20:11:08.6365 +0800 CST的过去
  if today.After(yesterday) {
    fmt.Printf(" 今天 %v 是 昨天 %v的将来\n", today, yesterday)
  } else {
    fmt.Println("exception")
  }
  if today.Before(tomorrow) {
    fmt.Printf(" 今天 %v 是 明天 %v的过去\n", today, tomorrow)
  } else {
    fmt.Println("exception")
  }
}

640.png


相关文章
|
2月前
|
算法 Go
Golang限流器time/rate正确打开姿势
本文详细探讨了 Go 语言限流工具 `golang.org/x/time/rate` 包下的 `Limiter` 类,并通过示例展示了如何使用该工具实现 QPS 限流功能。作者深入分析了 `Limiter` 的内部工作机制,揭示了其独特的算法设计,并指出了在动态调整限流参数时可能遇到的问题及解决方法。此外,还对比了该算法与传统令牌桶和滑动窗口算法的区别,总结了其优缺点。最后,作者给出了修正限流问题的具体代码示例。
Golang限流器time/rate正确打开姿势
|
2月前
|
Unix Go
Golang语言标准库time之日期和时间相关函数
这篇文章是关于Go语言日期和时间处理的文章,介绍了如何使用Go标准库中的time包来处理日期和时间。
47 3
|
6月前
|
安全 Unix Go
Golang深入浅出之-Go语言中的时间与日期处理:time包详解
【4月更文挑战第26天】Go语言的`time`包提供处理日期和时间的功能,包括`time.Time`类型、时间戳、格式化与解析。本文讨论了核心概念、常见问题(如时区处理、格式字符串混淆、超时控制和并发安全)及解决方法。推荐使用`time.LoadLocation`管理时区,熟悉时间格式规则,用`context`精确控制超时,并注意并发安全。文中通过代码示例展示了如何获取格式化时间、计算时间差以及创建定时任务。学习和应用这些知识可提高程序的健壮性和准确性。
243 2
Golang:time包的时间枚举常量
Golang:time包的时间枚举常量
84 0
Golang:time模块获取当前日期/时间戳并格式化输出
Golang:time模块获取当前日期/时间戳并格式化输出
131 0
Golang:time模块获取当前日期并格式化输出
Golang:time模块获取当前日期并格式化输出
633 0
|
NoSQL Unix Go
Golang内置包-time
Golang内置包-time
221 0
|
2月前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
110 4
Golang语言之管道channel快速入门篇
|
2月前
|
Go
Golang语言文件操作快速入门篇
这篇文章是关于Go语言文件操作快速入门的教程,涵盖了文件的读取、写入、复制操作以及使用标准库中的ioutil、bufio、os等包进行文件操作的详细案例。
66 4
Golang语言文件操作快速入门篇
|
2月前
|
Go
Golang语言之gRPC程序设计示例
这篇文章是关于Golang语言使用gRPC进行程序设计的详细教程,涵盖了RPC协议的介绍、gRPC环境的搭建、Protocol Buffers的使用、gRPC服务的编写和通信示例。
101 3
Golang语言之gRPC程序设计示例