Go の時間比較: タイムゾーン変換の謎を解明する
Go の時間操作の分野では、一般的なタスクに時間の変換が含まれますゾーン。ただし、最も単純な関数でも予期しない結果が生じる場合があります。 UTC 時間を 0700 WIB に変換しようとしたときに開発者によって報告された問題を調べてみましょう。
開発者は、時間を 0700 WIB に変換する GenerateWIB と、時間を UTC に変換する GenerateUTC という 2 つの関数を作成しました。 。 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>
比較 res != Expect は、res と Expect の両方が同じ時点を表すと期待されていたにもかかわらず、一貫して false を返しました。当惑した開発者は、何かを見逃したのではないかと尋ねました。
その答えは、Go の time.Time 構造の複雑な性質にあります。ドキュメントで明らかにされているように、比較で使用される == 演算子は、時刻だけでなく、time.Value に関連付けられた場所と単調時計の読み取り値も評価します。
2 つの時間値を正確に比較するには、. Equal() メソッドを使用する必要があります。この方法により、絶対時間、位置、単調時計の読み取り値など、時間値の関連するすべての側面が比較で考慮されるようになります。
結論として、Go で時間変換を行う場合は、時間の複雑さ。時間構造。時間比較に .Equal() メソッドを利用することで、開発者は予期せぬ結果を回避し、正確な結果を保証できます。
以上がGo タイムゾーン変換が機能しないのはなぜですか? 「time.Time」の比較の詳細の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。