Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Membongkar Format Masa Tarikh Tidak Konsisten dalam Go?

Bagaimana untuk Membongkar Format Masa Tarikh Tidak Konsisten dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-11-05 05:31:01672semak imbas

How to Unmarshal Inconsistent Datetime Formats in Go?

Format Masa Tarikh Tidak Konsisten Unmarshal

Apabila berurusan dengan data JSON, tarikh unmarshaling boleh membawa kepada ketidakkonsistenan disebabkan oleh format mengimbangi zon waktu yang berbeza-beza. Walaupun mekanisme penghuraian standard Go menjangkakan pengimbangan zon waktu dalam format 02:00, sesetengah data mungkin mengandungi format yang salah seperti 0200.

Untuk menangani perkara ini, Go menyediakan kaedah unmarshaling tersuai untuk mengendalikan kedua-dua format zon waktu yang betul dan tidak betul. Berikut ialah pendekatan yang disemak:

type MyTime struct {
    time.Time
}

func (self *MyTime) UnmarshalJSON(b []byte) (err error) {
    s := string(b)

    // Remove quotation marks
    s = s[1:len(s)-1]

    // Attempt to parse using RFC3339Nano format
    t, err := time.Parse(time.RFC3339Nano, s)
    if err != nil {
        // If parsing fails, try custom format without ':'
        t, err = time.Parse("2006-01-02T15:04:05.999999999Z0700", s)
    }
    self.Time = t
    return
}

type Test struct {
    Time MyTime `json:"time"`
}

Dalam kaedah unmarshaling tersuai ini (UnmarshalJSON), kami:

  1. Menghuraikan menggunakan format RFC3339Nano standard.
  2. Jika penghuraian gagal disebabkan format mengimbangi zon waktu yang salah, kami menghuraikan menggunakan format yang diubah suai ("2006-01-02T15:04:05.999999999Z0700") yang memasukkan ':' ke dalam ofset zon waktu.

Pendekatan ini memastikan bahawa kedua-dua rentetan datetime yang betul dan tidak betul dihuraikan dengan betul.

Atas ialah kandungan terperinci Bagaimana untuk Membongkar Format Masa Tarikh Tidak Konsisten 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