2017-07-11 160 views
3

我有兩個這樣的日期,我想只比較日期,忽略時間。目前我有這個:比較兩個日期而不考慮時間

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

您是否還想考慮時區?例如,「2017-01-01T22:00:00 + 00:00」和「2017-01-02T02:00:00 + 04:00」是同一時刻 - 但是會用不同的時區來描述。 – Addison

+0

這是一個很好的問題,與我一起工作的日期都假定爲UTC,所以它並不重要。但是如果他們有不同的時區,我需要考慮到這一點。 – Max

+0

那麼,在那種情況下,eugenioy的答案似乎涵蓋了它。供參考 - 他們的答案確實考慮了時區,所以我提到的那兩個日期將被視爲同一天,因此相隔0小時。 – Addison

回答

3

你可以Truncate使他們成爲一天的倍數的時間。

在您的例子:

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

查找與適應代碼在這裏的遊樂場:https://play.golang.org/p/yWIYt3UkiT

+0

另請參閱:https://golang.org/pkg/time/#Time.Truncate –

+0

好的,我明白了。我之前通過API文檔進行了閱讀,但不確定要使用Truncate方法做些什麼。我會試試這個,謝謝。 – Max

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週期和鐘面時間。