Maison > développement back-end > Golang > Pourquoi mon code Go renvoie-t-il toujours l'heure UTC malgré la spécification de différents fuseaux horaires à l'aide de « time.Parse » ?

Pourquoi mon code Go renvoie-t-il toujours l'heure UTC malgré la spécification de différents fuseaux horaires à l'aide de « time.Parse » ?

Barbara Streisand
Libérer: 2024-11-29 11:28:12
original
936 Les gens l'ont consulté

Why Does My Go Code Always Return UTC Time Despite Specifying Different Time Zones Using `time.Parse`?

Analyse des codes de fuseau horaire : une plongée plus approfondie

Lors d'une précédente tentative d'analyse des codes de fuseau horaire, le code ci-dessous a systématiquement donné le résultat "[date] 05:00:00 0000 UTC" quel que soit le fuseau horaire choisi pour la fonction parseAndPrint.

// time testing with arbitrary format
package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    parseAndPrint(now, "BRT")
    parseAndPrint(now, "EDT")
    parseAndPrint(now, "UTC")
}

func parseAndPrint(now time.Time, timezone string) {
    test, err := time.Parse("15:04:05 MST", fmt.Sprintf("05:00:00 %s", timezone))
    if err != nil {
        fmt.Println(err)
        return
    }

    test = time.Date(
        now.Year(),
        now.Month(),
        now.Day(),
        test.Hour(),
        test.Minute(),
        test.Second(),
        test.Nanosecond(),
        test.Location(),
    )

    fmt.Println(test.UTC())
}
Copier après la connexion

Ceci Le problème vient du fait que time.Parse interprète l'heure de l'emplacement actuel, qui peut ne pas correspondre au fuseau horaire prévu.

Résoudre le problème : comprendre le contexte du fuseau horaire

Pour analyser avec précision les codes de fuseau horaire, la bonne approche consiste à utiliser le temps.Lieu. Voici une implémentation améliorée :

func parseAndPrint(now time.Time, timezone string) {
    location, err := time.LoadLocation(timezone)
    if err != nil {
        fmt.Println(err)
        return
    }

    test, err := time.ParseInLocation("15:04:05 MST", "05:00:00", location)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(test.UTC())
}
Copier après la connexion

Dans ce code mis à jour :

  • time.LoadLocation(timezone) charge l'emplacement du fuseau horaire spécifié.
  • time.ParseInLocation( "15:04:05 MST", "05:00:00", emplacement) analyse l'heure "05:00:00" à l'emplacement du fuseau horaire spécifié. Cela donne l'heure correcte dans le fuseau horaire prévu.

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