当前位置:首页 > 技术分析 > 正文内容

golang处理时间的包time一次性全面了解

ruisui881个月前 (05-11)技术分析23

本文旨在对官方time包有个全面学习了解。不钻抠细节,但又有全面了解,重点介绍常用的内容,一些低频的可能这辈子可能都用不上。主打一个花最少时间办最大事。以下是博主肝了半天通读了遍官方time包,提炼出来的,希望对看官有帮助!

- Duration对象: 两个time实例经过的时间,以长度为int64的纳秒来计数。
  常见的duration, golang没有预设天或者比天大的duration单位,为了避免跨夏令时转换问题
  > Nanosecond  Duration = 1 //纳秒
    Microsecond          = 1000 * Nanosecond //微秒
    Millisecond          = 1000 * Microsecond //毫秒
    Second               = 1000 * Millisecond
    Minute               = 60 * Second
    Hour                 = 60 * Minute

  获取单位间的进制数:
  fmt.Print(int64(second/time.Millisecond)) // prints 1000
  - Duration对象上的常用方法
    - ParseDuration(s string) (Duration, error) : 将字符串解析为duration, 类似这种字符串"-1h10m10s6ms7us8ns",最前面可以有-表反向,不加就是正向,-只能加在最前面,比如这个例子-加在-10s就会抛错
    - String() string : 以"72h3m0.5s"格式打印
    - Since(t Time) Duration : time.Now().Sub(t)的简便写法
    - Truncate(m Duration) Duration : 保留m的整数倍duration,其余全舍弃,相当于除m(/m)
    - Round(m Duration) Duration: 保留距离m的倍数最近的duration,也就除m后会四舍五入

- 获取location常用方法
  - time.LoadLocation(name string) (*Location, error): name: 预设的时区名,找不到会抛错,名字大小写严格敏感
    > chinaLocation, err := time.LoadLocation("Asia/Shanghai")
      if err != nil {//逻辑上很有必要检测下
         panic(err)
      }
  - time.FixedZone(name string, offset int) *Location : name打印时时区部分原样展示这个, offset 对于UTC的偏移量(秒)
    > chinaLocation := time.FixedZone("CST", int(8*60*time.Second))

- 字符串解析为时间
  - time.Parse(layout, value string) (Time, error): time.Parse("2006-01-02 15:04:05 MST", "2025-04-17 15:16:17 CST")
    - layout中月/日/小时/分钟/秒/年分别由1/2/3(24小时就是15)/4/5/6表示;带时区固定用MST(美国山区时间)。golang本身有些预设layout,
      比如time.DateTime就和上面例子中的一样但不带MST
  - time.ParseInLocation(layout, value string, loc *Location) (Time, error) :同time.Parse差不多,只是时区由第二个参数指定

- 时间戳转换到时间time对象
  - time.Unix(sec int64, nsec int64) Time: time.Unix(1744881455, 0)

- 一种创建时间time对象
  - time.Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC)
  
- time对象的常用方法
  - In(loc *Location) Time : 原本time实例复制,但时区设为loc,为了打印日期用的。//比如打印美国的时间 time.Now().In(美国Location对象).Format("2006-01-02 15:04:05 MST")
  - Format(layout string) string :根据layout格式打印出字符串日期 //time.Now().Format("2006-01-02 15:04:05 MST")
  - Unix() int64 : 获取time对象的时间戳
  - Sub(u Time) Duration : 与时间u的差值 // 
    > start := time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)  
      end := time.Date(2000, 1, 1, 12, 0, 0, 0, time.UTC)
      diff := end.Sub(start)
      fmt.Printf("difference = %v; 分钟=%v\n", diff, diff.Minutes()) //diff = 12h0m0s; 分钟=720
  - AddDate(years int, months int, days int) Time : 增加/减少日期 // 比如AddDate(-1, 2, 3)
  
- Sleep(d Duration): 暂停当前协程至少时间d。d为<=0时,sleep立马返回

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3973.html

分享给朋友:

“golang处理时间的包time一次性全面了解” 的相关文章

基于Ubuntu的Linux Lite 6.0发行版正式发布

开发者 Jerry Bezencon 今天宣布,基于 Ubuntu 的 Linux Lite 6.0 发行版正式发布。本次更新代号为“Fluorite”,基于 Ubuntu 22.04 LTS (Jammy Jellyfish) 系统,它由长期支持的 Linux 5.15 LTS 内核系列驱动。下载...

git的几种分支模式

编写代码,是软件开发交付过程的起点,发布上线,是开发工作完成的终点。代码分支模式贯穿了开发、集成和发布的整个过程,是工程师们最亲切的小伙伴。那如何根据自身的业务特点和团队规模来选择适合的分支模式呢?本文分享几种主流 Git 分支模式的流程及特点,并给出选择建议。分支的目的是隔离,但多一个分支也意味着...

Gitlab+Jenkins通过钩子实现自动部署web项目,图文详细教程

扩展参考:Jenkins+Gitlab通过脚本自动部署回滚web项目至集群 一:基础环境介绍及准备1):Gitlab服务器:ubuntu 192.168.152.131 ---参考搭建:Linux安装gitlab,docker安装gitlab教程2):Jenkins服务器:ubunu 192.168...

快速掌握 Git:程序员必会的版本控制技巧

在现代软件开发中,版本控制系统(VCS)是开发人员不可或缺的工具。无论是个人项目,还是多人协作的团队开发,良好的版本控制都能确保代码管理的高效性与稳定性。而在版本控制系统中,Git 凭借其分布式、灵活性和高效性,成为了最流行的工具之一。几乎所有的开发团队都在使用 Git 来管理代码版本、协作开发和追...

深度解析!AI智能体在To B领域应用,汽车售后服务落地全攻略

在汽车售后服务领域,AI智能体的应用正带来一场效率和专业度的革命。本文深度解析了一个AI智能体在To B领域的实际应用案例,介绍了AI智能体如何通过提升服务顾问和维修技师的专业度及维修效率,优化汽车售后服务流程。上周我分享了AI智能体+AI小程序To C的AI应用场景《1000%增长!我仅用一个小时...

Vue中路由router的基本使用

??本文开始我们来给大家介绍在Vue中非常重要的一个内容,就是路由Router什么是路由后端路由:对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源;前端路由:对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,同时,hash有一个特...