Unmarshal Salah Format Datetime
Latar Belakang
Apabila cuba menghuraikan rentetan datetime dalam Go menggunakan masa. Parse, ia boleh gagal jika offset zon waktu tidak diformat dengan betul. Khususnya, jika ofset dinyatakan sebagai " 0200" dan bukannya " 02:00", seperti yang dikehendaki oleh RFC3339.
Soalan
Diberikan satu set fail JSON yang mengandungi datetimes dengan format offset yang salah, bagaimanakah kita boleh menyahmarshalnya dengan betul dalam Go tanpa mengubah format datetimes yang disusun semula kepada JSON?
Jawapan
Masa Tersuai Medan
Untuk mengendalikan kedua-dua format ofset yang sah dan tidak sah, kami boleh menentukan jenis medan masa tersuai kami sendiri. Ini membolehkan kami mengatasi kelakuan unmarshal lalai dan menghuraikan rentetan datetime secara manual mengikut salah satu daripada dua format yang dijangkakan.
Contoh Pelaksanaan
<code class="go">type MyTime struct { time.Time } func (self *MyTime) UnmarshalJSON(b []byte) (err error) { s := string(b) // Remove quotes from JSON string (optional) s = s[1:len(s)-1] t, err := time.Parse(time.RFC3339Nano, s) if err != nil { t, err = time.Parse("2006-01-02T15:04:05.999999999Z0700", s) } self.Time = t return } type Test struct { Time MyTime `json:"time"` }</code>
Dalam contoh ini , kami menggunakan kaedah UnmarshalJSON untuk mengatasi tingkah laku unmarshaling lalai. Kami mula-mula mengalih keluar sebarang petikan yang disertakan di sekitar rentetan datetime dan kemudian cuba menghuraikannya menggunakan format masa standard.RFC3339Nano. Jika itu gagal, kami cuba menghuraikan format yang salah ("2006-01-02T15:04:05.999999999Z0700") juga.
Format RFC3339Nano dalam Metadata JSON
Untuk menentukan penggunaan format RFC3339Nano untuk medan masa tersuai dalam JSON, kami hanya boleh menggunakan rentetan format yang sama seperti dalam kaedah UnmarshalJSON:<code class="go">type Test struct { Time MyTime `json:"time,omitempty"` }</code>
Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshal Rentetan Datetime yang Diformat dengan Salah dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!