您正在嘗試比較兩個時間實例,但結果不是您所期望的。
您有兩個函數GenerateWIB和GenerateUTC 來更改給定時間的時區。 GenerateUTC 運作正常,而GenerateWIB 則不行。
比較兩個時間的程式碼是:
<code class="go">expect := time.Date(2016, 12, 12, 1, 2, 3, 4, wib) t1 := time.Date(2016, 12, 12, 1, 2, 3, 4, time.UTC) res := GenerateWIB(t1) if res != expect { fmt.Printf("WIB Expect %+v, but get %+v", expect, res) }</code>
此比較的結果總是 false,即使這兩個時間是相同。
問題是您正在使用 == 運算子來比較兩個 time.Time 實例。 == 運算子比較兩個結構體的所有欄位的值,包括 Location 欄位。
Location 欄位指定時間實例的時區。在您的情況下,expect 的時區為 wib,而 res 的時區為 UTC。這就是 == 運算子傳回 false 的原因。
要正確比較兩個 time.Time 實例,您應該使用 Equal 方法。 Equal 方法比較兩個結構體的 wall 和 ext 欄位的值,這些欄位表示時間點。 Equal 方法會忽略 Location 欄位。
以下是修正的程式碼:
<code class="go">expect := time.Date(2016, 12, 12, 1, 2, 3, 4, wib) t1 := time.Date(2016, 12, 12, 1, 2, 3, 4, time.UTC) res := GenerateWIB(t1) if !res.Equal(expect) { fmt.Printf("WIB Expect %+v, but get %+v", expect, res) }</code>
現在,比較的結果為 true,這是正確的結果。
在比較兩個 time.Time 實例時,Equal 方法比 == 運算子更準確。 Equal 方法只考慮時間瞬間,而 == 運算子也考慮時區。
一般情況下,您應該使用 Equal 方法來比較兩個 time.Time 實例,除非您有特定原因使用 == 運算子。
以上是為什麼使用 == 運算子比較 Time.Time 實例會傳回 False,即使它們表示相同的時間?的詳細內容。更多資訊請關注PHP中文網其他相關文章!