Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 在不考虑时间的情况下比较两个日期_Date_Go - Fatal编程技术网

Date 在不考虑时间的情况下比较两个日期

Date 在不考虑时间的情况下比较两个日期,date,go,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) pr

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

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)
函数,或者重置日期时间的标准方法是什么

你可以把时间调整到一天的倍数

在您的示例中:

oneDay := 24 * time.Hour
a = a.Truncate(oneDay)
b = b.Truncate(oneDay)

请在此处找到一个具有相应代码的游乐场:

如果使用time.time,您必须非常小心地处理日期,因为夏令时的开始和结束可能会出现边缘情况

无耻的插件:我编写了一个日期包(实际上它是从其他人早期的工作中派生出来的)来处理日期,而不会引起DST问题

你可以做,比如

a := date.New(2017, 2, 1)
b := date.New(2017, 2, 11)
daysDifference := b.Sub(a)
fmt.Println(daysDifference)


还有其他子包来处理日期范围、时间跨度、ISO8601周期和时钟面时间。

好的,我明白了。我以前阅读过API文档,但不确定如何使用
Truncate
方法。我试试看,谢谢。你还想考虑时区吗?例如,
2017-01-01T22:00:00+00:00
2017-01-02T02:00:00+04:00
在时间上是相同的时刻,但用不同的时区来描述。这是一个好问题,我工作的日期都假定为UTC,所以这并不重要。但如果他们有不同的时区,我需要考虑到这一点。好吧,在这种情况下,欧金尼欧的答案似乎涵盖了这一点。仅供参考-他们的回答考虑了时区,因此我提到的两个日期将被视为同一天,因此相隔0小时。