2 つの時間インスタンスを比較しようとしていますが、結果は期待したものではありません。
GenerateWIB という 2 つの関数があります。 GenerateUTC を使用して、特定の時刻のタイムゾーンを変更します。 GenerateUTC は完全に機能しますが、GenerateWIB は機能しません。
2 つの時間を比較するコードは次のとおりです。
<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>
この比較の結果は、2 つの時間が同じであっても、常に false になります。
問題は、== 演算子を使用して 2 つの time.Time インスタンスを比較していることです。 == 演算子は、Location フィールドを含む 2 つの構造体のすべてのフィールドの値を比較します。
Location フィールドは、タイム インスタンスのタイム ゾーンを指定します。あなたの場合、expectのタイムゾーンはwibですが、resのタイムゾーンはUTCです。 == 演算子が false を返すのはこのためです。
2 つの time.Time インスタンスを正しく比較するには、Equal メソッドを使用する必要があります。 Equal メソッドは、時刻を表す 2 つの構造体の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 になり、これが正しい結果です。
2 つの time.Time インスタンスを比較する場合、Equal メソッドは == 演算子よりも正確です。 Equal メソッドは時刻のみを考慮しますが、== 演算子はタイム ゾーンも考慮します。
一般に、特別な理由がない限り、2 つの time.Time インスタンスを比較するには Equal メソッドを使用する必要があります。 == 演算子を使用します。
以上が== 演算子を使用して Time.Time インスタンスを比較すると、同じ時間を表している場合でも false が返されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。