Maison  >  Article  >  développement back-end  >  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
Barbara Streisandoriginal
2024-11-23 10:00:35909parcourir

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)
}

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)
}

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!

Déclaration:
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