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 » ?
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.
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 :
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!