我有两个这样的日期,我想只比较日期,忽略时间。目前我有这个:
package main
import (
"time"
//"fmt"
)
func main() {
a, _ := time.Parse(time.RFC3339, "2017-02-01T12:00:00+00:00")
b, _ := time.Parse(time.RFC3339, "2017-02-11T14:30:00+00:00")
x := b.Sub(a)
println(int(x.Hours()))
}
打印242
。这是正确的,但我真正想做的是比较这样的日期:
a, _ := time.Parse(time.RFC3339, "2017-02-01T00:00:00+00:00")
b, _ := time.Parse(time.RFC3339, "2017-02-11T00:00:00+00:00")
注意:分钟/小时/秒已设置为零 - 差异现在为240小时。
我无法弄清楚如何执行此操作,Go中是否存在time.SetTime(0, 0, 0)
函数,我错过了什么,或者重置日期时间的规范方法是什么?
答案 0 :(得分:3)
你可以Truncate
时间使它们成为一天的倍数。
在你的例子中:
oneDay := 24 * time.Hour
a = a.Truncate(oneDay)
b = b.Truncate(oneDay)
在此处找到包含改编代码的游乐场:https://play.golang.org/p/yWIYt3UkiT
答案 1 :(得分:0)
如果使用time.Time,你必须要小心处理日期,因为在夏令时的开始和结束时可能存在边缘情况。
无耻的插件:我写了一个Date包(实际上它来自其他人的早期工作)来处理日期而不会产生DST问题。
https://github.com/rickb777/date
你可以做,例如,
a := date.New(2017, 2, 1)
b := date.New(2017, 2, 11)
daysDifference := b.Sub(a)
fmt.Println(daysDifference)
还有其他子包来处理日期范围,时间跨度,ISO8601期间和时钟面时间。