== 연산자를 사용하여 Time.Time 인스턴스를 비교하면 동일한 시간을 나타내더라도 False가 반환되는 이유는 무엇입니까?

DDD
풀어 주다: 2024-10-25 06:52:29
원래의
212명이 탐색했습니다.

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

시간 비교 이동

두 시간 인스턴스를 비교하려고 하지만 결과가 기대한 것과 다릅니다.

두 가지 기능이 있습니다.GenerateWIB 주어진 시간의 시간대를 변경하려면 generateUTC를 사용하세요. GeneratorUTC는 완벽하게 작동하지만, GeneratorWIB는 그렇지 않습니다.

두 시간을 비교하는 코드는 다음과 같습니다.

<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 필드는 시간 인스턴스의 시간대를 지정합니다. 귀하의 경우 예상 시간대는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!