Maison > développement back-end > Golang > 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
Libérer: 2024-11-19 09:08:02
original
375 Les gens l'ont consulté

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

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

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

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