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
Barbara Streisandoriginal
2024-11-29 11:28:12933parcourir

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

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

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!

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