Rumah >pembangunan bahagian belakang >Golang >Mengapa Membandingkan Kejadian Masa.Masa Menggunakan == Operator Mengembalikan Palsu Walaupun Ia Mewakili Masa Yang Sama?
Anda cuba membandingkan dua kejadian masa, tetapi hasilnya tidak seperti yang anda jangkakan.
Anda mempunyai dua fungsi GenerateWIB dan GenerateUTC untuk menukar zon waktu masa tertentu. GenerateUTC berfungsi dengan sempurna, manakala GenerateWIB tidak.
Kod untuk membandingkan dua masa ialah:
<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>
Hasil perbandingan ini sentiasa palsu, walaupun dua masa itu adalah sama.
Masalahnya ialah anda menggunakan operator == untuk membandingkan dua kejadian masa.Masa. Operator == membandingkan nilai semua medan kedua-dua struct, termasuk medan Lokasi.
Medan Lokasi menentukan zon waktu kejadian masa. Dalam kes anda, expect mempunyai zon waktu wib, manakala res mempunyai zon waktu UTC. Inilah sebabnya mengapa operator == mengembalikan palsu.
Untuk membandingkan dua kejadian masa. Masa dengan betul, anda harus menggunakan kaedah Equal. Kaedah Equal membandingkan nilai dinding dan medan ext kedua-dua struktur, yang mewakili seketika masa. Kaedah Equal mengabaikan medan Lokasi.
Berikut ialah kod yang diperbetulkan:
<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>
Sekarang, hasil perbandingan adalah benar, iaitu hasil yang betul.
Kaedah Equal adalah lebih tepat daripada operator == apabila membandingkan dua kejadian masa.Masa. Kaedah Equal hanya mengambil kira masa segera, manakala operator == juga mempertimbangkan zon waktu.
Secara umum, anda harus menggunakan kaedah Equal untuk membandingkan dua masa. Contoh masa, melainkan anda mempunyai sebab tertentu untuk gunakan operator ==.
Atas ialah kandungan terperinci Mengapa Membandingkan Kejadian Masa.Masa Menggunakan == Operator Mengembalikan Palsu Walaupun Ia Mewakili Masa Yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!