Mengapa masa Go.Parse() Tidak Menghuraikan Pengecam Zon Waktu
Dalam Go, fungsi masa.Parse() digunakan untuk menghuraikan rentetan tarikh dan masa ke dalam nilai Masa. Walau bagaimanapun, tidak seperti pustaka tarikh dan masa yang lain, time.Parse() tidak menghuraikan pengecam zon waktu secara automatik seperti "EST" atau "EDT". Sebaliknya, ia menggunakan zon waktu sistem semasa untuk menentukan offset untuk masa itu.
Masalahnya
Kod yang disediakan dalam soalan menunjukkan isu ini. Ia cuba menghuraikan rentetan tarikh ("2018 08 01 12:00 EDT") menggunakan masa.Parse() dalam dua cara: dengan dan tanpa menyatakan lokasi zon waktu yang diingini (America/New_York).
Apabila menggunakan time.Parse() tanpa menyatakan lokasi, pengecam zon waktu ("EDT") tidak dikenali dan masa dihuraikan sebagai berada dalam zon waktu sistem semasa ("0000"). Ini mengakibatkan nilai masa yang salah.
Penyelesaian
Untuk menghuraikan rentetan tarikh dan masa dengan betul yang termasuk pengecam zon waktu, fungsi masa.ParseInLocation() mesti digunakan. Fungsi ini mengambil parameter Lokasi tambahan, yang menentukan zon waktu yang diingini untuk masa yang dihuraikan.
Dalam kod yang disediakan, time.LoadLocation() digunakan untuk mencipta objek Lokasi untuk zon waktu yang dikehendaki ("America/New_York ") sebelum menghantarnya ke masa.ParseInLocation(). Ini memastikan bahawa pengecam zon waktu ("EDT") dihuraikan dengan betul dan nilai masa yang betul dikembalikan.
Penyelesaian Alternatif
Sebagai alternatif, seseorang boleh menggunakan tarikh dan pustaka masa yang menyokong penghuraian zon waktu secara jelas, seperti pustaka "time.go" yang popular. Pustaka ini menyediakan fungsi seperti ParseInZone(), yang membenarkan penghuraian terus pengecam zon waktu.
Atas ialah kandungan terperinci Mengapa `time.Parse()` Tidak Mengendalikan Pengecam Zon Waktu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!