Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyahmarshal Datetimes Salah Format dalam Go?

Bagaimana untuk Menyahmarshal Datetimes Salah Format dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-06 10:43:02285semak imbas

How to Unmarshal Incorrectly Formatted Datetimes in Go?

Unmarshal Salah Format Datetime

Apabila menyahmarshall datetimes JSON dalam Go, isu biasa timbul apabila offset zon waktu yang disediakan dalam JSON tidak diformat dengan betul . Format yang dijangkakan, menurut RFC3339, ialah 02:00 dengan titik bertindih, tetapi sesetengah sumber mungkin mengeluarkannya sebagai 0200 tanpa titik bertindih.

Penyelesaian Unmarshaling Tersuai

Kepada mengendalikan percanggahan ini, jenis medan masa tersuai boleh ditakrifkan yang menyokong kedua-dua format:

<code class="go">type MyTime struct {
    time.Time
}

func (self *MyTime) UnmarshalJSON(b []byte) (err error) {
    s := string(b)
    s = s[1:len(s)-1] // Remove the quotes

    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
}</code>

Penyelesaian ini memanfaatkan kaedah UnmarshalJSON untuk mengalih keluar petikan daripada rentetan JSON terlebih dahulu. Kemudian, ia cuba menghuraikan masa tarikh menggunakan format RFC3339Nano standard. Jika gagal, ia akan kembali untuk menghuraikan format yang diubah suai yang mengalih keluar titik bertindih daripada zon waktu mengimbangi.

Penyatuan Struktur

Untuk menyepadukan jenis ini ke dalam struct, tentukan ia sebagai:

<code class="go">type Test struct {
    Time MyTime `json:"time"`
}</code>

Ini membolehkan JSON dibongkar ke dalam struct Ujian, dengan medan Masa diisi dengan tarikh dan masa yang betul, tidak kira sama ada offset zon waktu dipisahkan dengan titik bertindih atau tidak.

Nota Format Masa

Penggunaan tahun 2006 dalam rentetan format masa ialah artifak sejarah daripada keluaran awal Go. Ia tidak mempunyai kepentingan praktikal dan tidak menjejaskan ketepatan atau pemformatan masa tarikh.

Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshal Datetimes Salah Format dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn