Maison  >  Article  >  développement back-end  >  Pourquoi la comparaison d'instances Time.Time à l'aide de l'opérateur == renvoie-t-elle False même si elles représentent la même heure ?

Pourquoi la comparaison d'instances Time.Time à l'aide de l'opérateur == renvoie-t-elle False même si elles représentent la même heure ?

DDD
DDDoriginal
2024-10-25 06:52:29213parcourir

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

Allez à la comparaison temporelle

Vous essayez de comparer deux instances temporelles, mais le résultat n'est pas celui que vous attendez.

Vous disposez de deux fonctions GenerateWIB et GenerateUTC pour changer le fuseau horaire d’une heure donnée. GenerateUTC fonctionne parfaitement, contrairement à GenerateWIB.

Le code pour comparer les deux heures est :

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

Le résultat de cette comparaison est toujours faux, même si les deux heures sont les mêmes. pareil.

Le problème est que vous utilisez l'opérateur == pour comparer deux instances time.Time. L'opérateur == compare les valeurs de tous les champs des deux structures, y compris le champ Emplacement.

Le champ Emplacement spécifie le fuseau horaire de l'instance horaire. Dans votre cas, expect a un fuseau horaire wib, tandis que res a un fuseau horaire UTC. C'est pourquoi l'opérateur == renvoie false.

Pour comparer correctement deux instances time.Time, vous devez utiliser la méthode Equal. La méthode Equal compare les valeurs des champs wall et ext des deux structures, qui représentent l'instant temporel. La méthode Equal ignore le champ Localisation.

Voici le code corrigé :

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

Maintenant, le résultat de la comparaison est vrai, ce qui est le résultat correct.

Remarque

La méthode Equal est plus précise que l'opérateur == lors de la comparaison de deux instances time.Time. La méthode Equal prend en compte uniquement l'instant temporel, tandis que l'opérateur == prend également en compte le fuseau horaire.

En général, vous devez utiliser la méthode Equal pour comparer deux instances time.Time, sauf si vous avez une raison spécifique de le faire. utilisez l'opérateur ==.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn