Rumah >pembangunan bahagian belakang >Golang >Mengapakah `time.Parse` Go Gagal Menghuraikan Zon Masa dengan Tepat, dan Bagaimanakah Ini Boleh Dibetulkan?
Memahami Penghuraian Zon Waktu dalam Go
Menghuraikan kod zon waktu dalam Go melibatkan penukaran perwakilan rentetan zon waktu kepada *masa yang sepadan .Objek lokasi. Walau bagaimanapun, dalam senario tertentu, hasil yang dihuraikan mungkin tidak menggambarkan zon waktu yang dikehendaki dengan tepat. Artikel ini meneroka isu biasa dalam penghuraian zon waktu dan menyediakan penyelesaian.
Perumusan Masalah
Pertimbangkan kod berikut:
package main import ( "fmt" "time" ) func main() { now := time.Now() parseAndPrint(now, "BRT") parseAndPrint(now, "EDT") parseAndPrint(now, "UTC") } func parseAndPrint(now time.Time, timezone string) { test, err := time.Parse("15:04:05 MST", fmt.Sprintf("05:00:00 %s", timezone)) if err != nil { fmt.Println(err) return } test = time.Date( now.Year(), now.Month(), now.Day(), test.Hour(), test.Minute(), test.Second(), test.Nanosecond(), test.Location(), ) fmt.Println(test.UTC()) }
Apabila berjalan kod ini, output sentiasa menunjukkan "[tarikh] 05:00:00 0000 UTC", tanpa mengira masa yang ditentukan zon. Ini kerana kod sedang menghuraikan masa di lokasi semasa dan kemudian menetapkan zon waktu secara eksplisit kepada UTC.
Penyelesaian: Menggunakan masa.Lokasi
Untuk mengendalikan dengan betul penghuraian zon waktu, kita perlu menggunakan jenis *masa.Lokasi. Kami boleh memuatkan lokasi daripada pangkalan data zon waktu tempatan menggunakan masa.LoadLocation dan kemudian menghuraikan masa menggunakan masa.ParseInLocation. Berikut ialah kod yang diubah suai:
package main import ( "fmt" "time" ) func main() { now := time.Now() parseAndPrint(now, "BRT") parseAndPrint(now, "EDT") parseAndPrint(now, "UTC") } func parseAndPrint(now time.Time, timezone string) { location, err := time.LoadLocation(timezone) if err != nil { fmt.Println(err) return } test, err := time.ParseInLocation("15:04:05 MST", "05:00:00", location) if err != nil { fmt.Println(err) return } fmt.Println(test) }
Kini, kod akan menghuraikan masa khusus zon waktu dengan betul dan mencetak hasilnya dalam format zon waktu yang diingini.
Atas ialah kandungan terperinci Mengapakah `time.Parse` Go Gagal Menghuraikan Zon Masa dengan Tepat, dan Bagaimanakah Ini Boleh Dibetulkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!