比较两个日期而不考虑时间

时间:2017-07-11 02:45:23

标签: date go

我有两个这样的日期,我想只比较日期,忽略时间。目前我有这个:

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)函数,我错过了什么,或者重置日期时间的规范方法是什么?

2 个答案:

答案 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期间和时钟面时间。

相关问题