タイムゾーン コードを解析する以前の試みでは、以下のコードは常に結果「[date] 05:00:00」を生成しました。 parseAndPrint に選択されたタイムゾーンに関係なく、0000 UTC」 function.
// 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()) }
この問題は、time.Parse が現在の場所の時刻を解釈するため、意図したタイムゾーンと一致しない可能性があることが原因です。
タイムゾーン コードを正確に解析するには、time.Location を使用する正しいアプローチが必要です。改善された実装は次のとおりです。
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()) }
この更新されたコードでは、
以上が「time.Parse」を使用して異なるタイムゾーンを指定しているにもかかわらず、Go コードが常に UTC 時間を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。