Bagaimana untuk Menyahmarshal Datetimes Salah Format dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-11-06 10:43:02
asal
204 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!