当前位置: 首页 > news >正文

Golang 中的 time 包详解(二):time.Duration

在日常开发过程中,会频繁遇到对时间进行操作的场景,使用 Golang 中的 time 包可以很方便地实现对时间的相关操作。接下来的几篇文章会详细讲解 time 包,本文讲解一下 time 包中的 time.Duration 类型。

time.Duration

time.Duration 类型是一个有符号的 int64 类型,以纳秒为单位,用来表示两个时间点之间的时长。类型定义如下:

type Duration int64

拥有的方法如下:

  • func (d Duration) Hours() float64,返回持续的时间,以小时为单位。
  • func (d Duration) Minutes() float64,返回持续的时间,以分钟为单位。
  • func (d Duration) Seconds() float64,返回持续的时间,以秒为单位。
  • func (d Duration) Milliseconds() int64,返回持续的时间,以毫秒为单位。
  • func (d Duration) Microseconds() int64,返回持续的时间,以微秒为单位。
  • func (d Duration) Nanoseconds() int64,返回持续的时间,以纳秒为单位。
  • func (d Duration) String() string,返回一个字符串类型的持续的时间,格式为 “72h3m0.5s”。示例如下:
package mainimport ("fmt""time"
)func main() {a := time.Duration(3) * time.Hourfmt.Println(a.Hours())        // 3fmt.Println(a.Minutes())      // 180fmt.Println(a.Seconds())      //10800fmt.Println(a.Milliseconds()) //10800000fmt.Println(a.Microseconds()) //10800000000fmt.Println(a.Nanoseconds())  //10800000000000fmt.Println(a.String())       //3h0m0s
}
  • func (d Duration) Round(m Duration) Duration,返回将 d 四舍五入到 m 的最接近倍数的结果。通过示例理解一下:
package mainimport ("fmt""time"
)func main() {a := time.Duration(10) * time.Minute// 结果为 10,10 正好是 1 的整数倍fmt.Println(a.Round(time.Duration(1) * time.Minute))// 结果为 9,3 的 3 倍是 9,3 的 4 倍是 12,9 和 10 离得更近fmt.Println(a.Round(time.Duration(3) * time.Minute))// 结果为 12,4 的 2 倍是 8,4 的 3 倍是 12,距离一样近往上入fmt.Println(a.Round(time.Duration(4) * time.Minute))// 结果为 10,10 正好是 5 的整数倍fmt.Println(a.Round(time.Duration(5) * time.Minute))// 结果为12, 6 的 1 倍是 6,6 的 2 倍是 12,10 离 12 更近fmt.Println(a.Round(time.Duration(6) * time.Minute))
}
  • func (d Duration) Truncate(m Duration) Duration,用于将 d 截断到 m 最近整数倍。通过示例理解一下:
package mainimport ("fmt""time"
)func main() {a := time.Duration(10) * time.Minute// 结果为 10,10 正好是 1 的整数倍fmt.Println(a.Truncate(time.Duration(1) * time.Minute))// 结果为 9,3 的 3 倍是 9,最接近 10fmt.Println(a.Truncate(time.Duration(3) * time.Minute))// 结果为 8,4 的 2 倍是 8,最接近 10fmt.Println(a.Truncate(time.Duration(4) * time.Minute))// 结果为 10,10 正好是 5 的整数倍fmt.Println(a.Truncate(time.Duration(5) * time.Minute))// 结果为 6,6 的 1 倍是 6,最接近 10fmt.Println(a.Truncate(time.Duration(6) * time.Minute))// 结果为 0,11 的 1 倍是11,大于了 10fmt.Println(a.Truncate(time.Duration(11) * time.Minute))
}

加减法运算

因为 time.Duration 表示的是时间段,可以对 time.Duration 类型的值进行加减法运算,例如:

package mainimport ("fmt""time"
)func main() {a := time.Duration(10) * time.Minuteb := time.Duration(10) * time.Secondfmt.Println(a + b)fmt.Println(a - b)
}

http://www.lryc.cn/news/97536.html

相关文章:

  • Linux 学习记录58(ARM篇)
  • 【一文搞懂】—带霍尔编码器的直流有刷减速电机
  • 滴水逆向三期笔记与作业——02C语言——05 正向基础/05 循环语句
  • Python抓取分享页面的源代码示例
  • linux安装nginx遇到的报错
  • 一起学SF框架系列5.8-spring-Beans-Bean注解解析3-解析配置component-scan
  • 【LeetCode热题100】打卡第42天:滑动窗口最大值搜索二维矩阵II
  • [uni-app] 微信小程序 - 组件找不到/导入报错 (分包问题导致)
  • 从零构建医疗领域知识图谱的KBQA问答系统:其中7类实体,约3.7万实体,21万实体关系。
  • 编程小白的自学笔记十二(python爬虫入门四Selenium的使用实例二)
  • 技术笔记2023076 rBoot学习7
  • 收藏这6个抠图工具,一键抠图不用愁!
  • 四,Eureka 第四章
  • k8s常见的资源对象使用
  • JavaScript 简单实现观察者模式和发布订阅模式
  • 高通WLAN框架学习(37)-- TDLS(Tunneled Direct Link Setup)通道直接链路建立
  • 高算力AI模组前沿应用:基于ARM架构的SoC阵列式服务器
  • 老年公寓人员定位管理系统:提升安全与关怀的智能解决方案
  • 每日一题之两个字符串的删除操作
  • nacos安装与基础配置
  • GitHub Copilot:让开发编程变得像说话一样简单
  • 并发编程中锁的优化
  • 笔试题:统计字符串中某字符串在其出现的字符个数
  • Java NIO Files类读取文件流方式详解
  • Mybatis快速入门,Mybatis的核心配置文件
  • go语言中defer执行顺序
  • webpack xxx is not a constructor
  • 安装支持vs2019的MFC(解决MSBuild 错误 MSB8041、MSB8042)
  • 校园电气安全风险分析及预防措施 安科瑞 许敏
  • 机器学习之十大经典算法