Dalam percubaan sebelumnya untuk menghuraikan kod zon waktu, kod di bawah secara konsisten menghasilkan hasil "[tarikh] 05:00:00 0000 UTC" tanpa mengira zon waktu yang dipilih untuk parseAndPrint fungsi.
// time testing with arbitrary format 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()) }
Isu ini berpunca daripada fakta bahawa masa.Parse mentafsir masa di lokasi semasa, yang mungkin tidak sepadan dengan zon waktu yang dimaksudkan.
Untuk menghuraikan kod zon waktu dengan tepat, pendekatan yang betul melibatkan penggunaan masa.Lokasi. Berikut ialah pelaksanaan yang dipertingkatkan:
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.UTC()) }
Dalam kod yang dikemas kini ini:
Atas ialah kandungan terperinci Mengapa Kod Go Saya Sentiasa Mengembalikan Waktu UTC Walaupun Menentukan Zon Waktu Berbeza Menggunakan `time.Parse`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!