Maison > développement back-end > Golang > Comment désorganiser les dates-heures mal formatées dans Go ?

Comment désorganiser les dates-heures mal formatées dans Go ?

Mary-Kate Olsen
Libérer: 2024-11-06 10:43:02
original
315 Les gens l'ont consulté

How to Unmarshal Incorrectly Formatted Datetimes in Go?

Annuler les dates et heures mal formatées

Lors de la désactivation des dates et heures JSON dans Go, un problème courant survient lorsque le décalage de fuseau horaire fourni dans le JSON est mal formaté . Le format attendu, selon la RFC3339, est 02h00 avec deux points, mais certaines sources peuvent l'afficher sous la forme 0200 sans les deux points.

Solution de démarshaling personnalisée

Pour Pour gérer cet écart, un type de champ d'heure personnalisé peut être défini qui prend en charge les deux formats :

<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>
Copier après la connexion

Cette solution exploite la méthode UnmarshalJSON pour supprimer d'abord les guillemets de la chaîne JSON. Ensuite, il essaie d'analyser la date et l'heure en utilisant le format standard RFC3339Nano. Si cela échoue, il revient à analyser un format modifié qui supprime les deux points du décalage du fuseau horaire.

Intégration de structure

Pour intégrer ce type dans une structure, définissez comme :

<code class="go">type Test struct {
    Time MyTime `json:"time"`
}</code>
Copier après la connexion

Cela permet à JSON d'être désorganisé dans une structure de test, le champ Heure étant rempli avec la date et l'heure correctes, que le décalage du fuseau horaire soit séparé par deux points ou non.

Remarque sur le format de l'heure

L'utilisation de l'année 2006 dans les chaînes de format de l'heure est un artefact historique de la version initiale de Go. Cela n'a aucune signification pratique et n'affecte pas l'exactitude ou le formatage des dates et heures.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal