Maison  >  Article  >  développement back-end  >  Pourquoi « Time.Parse » de Go ne respecte-t-il pas toujours les informations de fuseau horaire ?

Pourquoi « Time.Parse » de Go ne respecte-t-il pas toujours les informations de fuseau horaire ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-19 09:08:02299parcourir

Why Doesn't Go's `Time.Parse` Always Respect Timezone Information?

Time.Parse : naviguer dans le labyrinthe de fuseaux horaires avec une analyse précise

La manipulation du temps dans Go offre un ensemble robuste de fonctionnalités. Time.Parse, une fonction essentielle du package time, est utilisée pour convertir méticuleusement les chaînes représentant les valeurs temporelles en structures temporelles internes de Go. Cependant, lors de l'analyse du temps avec Time.Parse, de nombreux développeurs rencontrent un problème déroutant : pourquoi ne prend-il pas toujours en compte les informations de fuseau horaire ?

Dévoilement de l'écart

Pour Pour illustrer le comportement, examinons l'extrait de code suivant :

package main

import (
    "fmt"
    "time"
)

func main() {
    t, err := time.Parse("2006-01-02 MST", "2018-05-11 IST")
    if err != nil {
        return
    }
    t2, err := time.Parse("2006-01-02 MST", "2018-05-11 UTC")
    if err != nil {
        return
    }
    fmt.Println(t.Unix())
    fmt.Println(t2.Unix())
}

Intuitivement, nous nous attendrions à des horodatages de sortie différents en raison des différents fuseaux horaires. Étonnamment, le code produit les mêmes valeurs pour les deux horodatages, malgré le décalage évident entre IST et UTC.

Plonger dans la justification

La raison derrière ce comportement réside dans l'absence d'informations explicites sur le fuseau horaire dans la disposition temporelle utilisée dans la fonction Parse. Par défaut, Parse traite toute abréviation de fuseau horaire inconnue comme un emplacement hypothétique avec un décalage nul, ignorant ainsi le décalage désigné par IST. Par conséquent, les deux horodatages sont analysés comme étant dans le fuseau horaire UTC, ce qui donne les mêmes valeurs d'horodatage Unix.

Naviguer dans les complexités du fuseau horaire

Pour résoudre ce problème et analyser l'heure avec informations précises sur le fuseau horaire, plusieurs options sont à notre disposition :

1. Spécifier un décalage numérique explicite :

Au lieu de vous fier aux abréviations de fuseau horaire, spécifiez explicitement le décalage dans la disposition temporelle. Par exemple :

t, err := time.Parse("2006-01-02 -0700", "2018-05-11 +0530")

2. Tirez parti de ParseInLocation :

Utilisez la fonction ParseInLocation, qui vous permet de spécifier un emplacement de fuseau horaire personnalisé pour l'analyse. Cette technique offre un contrôle plus granulaire sur la gestion des fuseaux horaires. Par exemple :

loc, err := time.LoadLocation("Asia/Kolkata")
t, err := time.ParseInLocation("2006-01-02 MST", "2018-05-11 IST", loc)

En adoptant ces stratégies, vous pouvez analyser efficacement les valeurs de temps avec les informations de fuseau horaire correctes, permettant une manipulation précise de l'heure dans divers scénarios.

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