文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
3、计算、比较日期
讲到日期的计算就不得不提 time 包提供的一种新的类型 Duration
,源码是这样定义的:
type Duration int64
底层类型是 int64,表示一段时间间隔,单位是 纳秒。
3.1 24 小时之内的时间计算
now := time.Now()
fmt.Println(now)
// 1 小时 1 分 1s 之后
t1, _ := time.ParseDuration("1h1m1s")
fmt.Println(t1)
m1 := now.Add(t1)
fmt.Println(m1)
// 1 小时 1 分 1s 之前
t2, _ := time.ParseDuration("-1h1m1s")
m2 := now.Add(t2)
fmt.Println(m2)
// 3 小时之前
t3, _ := time.ParseDuration("-1h")
m3 := now.Add(t3 * 3)
fmt.Println(m3)
// 10 分钟之后
t4, _ := time.ParseDuration("10m")
m4 := now.Add(t4)
fmt.Println(m4)
// Sub 计算两个时间差
sub1 := now.Sub(m3)
fmt.Println(sub1.Hours()) // 相差小时数
fmt.Println(sub1.Minutes()) // 相差分钟数
额外再介绍两个函数 time.Since()
、 time.Until()
:
// 返回当前时间与 t 的时间差,返回值是 Duration
time.Since(t Time) Duration
// 返回 t 与当前时间的时间差,返回值是 Duration
time.Until(t Time) Duration
now := time.Now()
fmt.Println(now)
t1, _ := time.ParseDuration("-1h")
m1 := now.Add(t1)
fmt.Println(m1)
fmt.Println(time.Since(m1))
fmt.Println(time.Until(m1))
输出:
2021-01-10 20:41:48.668232 +0800 CST m=+0.000095594
2021-01-10 19:41:48.668232 +0800 CST m=-3599.999904406
1h0m0.000199007s
-1h0m0.000203035s
3.2 24 小时之外的时间计算
涉及到一天以外的时间计算,就需要用到 time.AddDate()
,函数原型:
func (t Time) AddDate(years int, months int, days int) Time
比如想知道 一年一个月零一天 之后的时间,就可以这样:
now := time.Now()
fmt.Println(now)
m1 := now.AddDate(1,1,1)
fmt.Println(m1)
再比如,想获得 2 天之前时间:
now := time.Now()
fmt.Println(now)
m1 := now.AddDate(0,0,-2)
fmt.Println(m1)
3.3 日期比较
日期的比较总共有三种:之前、之后和相等。
// 如果 t 代表的时间点在 u 之前,返回真;否则返回假。
func (t Time) Before(u Time) bool
// 如果 t 代表的时间点在 u 之后,返回真;否则返回假。
func (t Time) After(u Time) bool
// 比较时间是否相等,相等返回真;否则返回假。
func (t Time) Equal(u Time) bool
now := time.Now()
fmt.Println(now)
// 1 小时之后
t1, _ := time.ParseDuration("1h")
m1 := now.Add(t1)
fmt.Println(m1)
fmt.Println(m1.After(now))
fmt.Println(now.Before(m1))
fmt.Println(now.Equal(m1))
输出:
2021-01-10 21:00:44.409785 +0800 CST m=+0.000186800
2021-01-10 22:00:44.409785 +0800 CST m=+3600.000186800
true
true
false
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论