Heim  >  Artikel  >  Backend-Entwicklung  >  Warum gibt der Vergleich von Time.Time-Instanzen mit dem ==-Operator „False“ zurück, selbst wenn sie dieselbe Zeit darstellen?

Warum gibt der Vergleich von Time.Time-Instanzen mit dem ==-Operator „False“ zurück, selbst wenn sie dieselbe Zeit darstellen?

DDD
DDDOriginal
2024-10-25 06:52:29213Durchsuche

Why Does Comparing Time.Time Instances Using the == Operator Return False Even If They Represent the Same Time?

Zeitvergleich starten

Sie versuchen, zwei Zeitinstanzen zu vergleichen, aber das Ergebnis entspricht nicht Ihren Erwartungen.

Sie haben zwei Funktionen zum Generieren von WIB und GenerateUTC, um die Zeitzone einer bestimmten Zeit zu ändern. GenerateUTC funktioniert perfekt, GenerateWIB hingegen nicht.

Der Code zum Vergleichen der beiden Zeiten lautet:

<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>

Das Ergebnis dieses Vergleichs ist immer falsch, auch wenn die beiden Zeiten identisch sind das Gleiche.

Das Problem besteht darin, dass Sie den ==-Operator verwenden, um zwei time.Time-Instanzen zu vergleichen. Der ==-Operator vergleicht die Werte aller Felder der beiden Strukturen, einschließlich des Standortfelds.

Das Standortfeld gibt die Zeitzone der Zeitinstanz an. In Ihrem Fall hat „expect“ die Zeitzone „wib“, während „res“ die Zeitzone „UTC“ hat. Aus diesem Grund gibt der ==-Operator „false“ zurück.

Um zwei time.Time-Instanzen korrekt zu vergleichen, sollten Sie die Equal-Methode verwenden. Die Equal-Methode vergleicht die Werte der Felder wall und ext der beiden Strukturen, die den Zeitpunkt darstellen. Die Equal-Methode ignoriert das Standortfeld.

Hier ist der korrigierte Code:

<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>

Jetzt ist das Ergebnis des Vergleichs wahr, was das richtige Ergebnis ist.

Hinweis

Die Equal-Methode ist beim Vergleich zweier time.Time-Instanzen genauer als der ==-Operator. Die Equal-Methode berücksichtigt nur den Zeitpunkt, während der ==-Operator auch die Zeitzone berücksichtigt.

Im Allgemeinen sollten Sie die Equal-Methode verwenden, um zwei time.Time-Instanzen zu vergleichen, es sei denn, Sie haben einen bestimmten Grund dafür Verwenden Sie den ==-Operator.

Das obige ist der detaillierte Inhalt vonWarum gibt der Vergleich von Time.Time-Instanzen mit dem ==-Operator „False“ zurück, selbst wenn sie dieselbe Zeit darstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn