Maison > développement back-end > Golang > Pourquoi ma fonction Go `time.Parse` renvoie-t-elle une valeur de temps inattendue ?

Pourquoi ma fonction Go `time.Parse` renvoie-t-elle une valeur de temps inattendue ?

Barbara Streisand
Libérer: 2024-11-23 10:00:35
original
982 Les gens l'ont consulté

Why is my Go `time.Parse` function returning an unexpected time value?

Comprendre le comportement time.Parse dans Go

Lors de la tentative de conversion de chaînes en valeurs time.Time dans Go à l'aide de la méthode time.Parse, définir la chaîne de format correcte est crucial pour obtenir le résultat attendu.

Considérez le code suivant extrait :

package main

import (
    "fmt"
    "time"
)

func main() {
    const longForm = "2013-05-13T18:41:34.848Z"
    //even this is not working
    //const longForm = "2013-05-13 18:41:34.848 -0700 PDT"
    t, _ := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700 PDT")
    fmt.Println(t)
}
Copier après la connexion

Le code tente d'analyser une chaîne au format "2013-05-13 18:41:34.848 -0700 PDT" en utilisant la chaîne au format longForm. Cependant, le résultat est inattendu : "0001-01-01 00:00:00 0000 UTC".

Pour comprendre ce comportement, il est important de noter que l'heure de référence par défaut pour la méthode time.Parse est " Mon Jan 2 15:04:05 MST 2006", qui représente l'heure Unix 1136239445. Cela signifie que la chaîne de format doit représenter l'heure Unix. l'heure de référence en conséquence.

Dans le code donné, la chaîne de format longForm représente de manière incorrecte l'heure de référence comme "2006-01-02 15:04:05 -0700". Cette inadéquation dans le format de l'heure de référence entraîne une sortie inattendue.

Pour résoudre ce problème, la chaîne de format longForm doit être modifiée pour correspondre à l'heure de référence :

package main

import (
        "fmt"
        "log"
        "time"
)

func main() {
        const longForm = "2006-01-02 15:04:05 -0700"
        t, err := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700")
        if err != nil {
                log.Fatal(err)
        }
        fmt.Println(t)
}
Copier après la connexion

Avec le format longForm correct chaîne de formatage, la méthode time.Parse convertit désormais avec précision la chaîne en valeur time.Time : "2013-05-13 01:41:34.848 0000 UTC".

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