ホームページ >バックエンド開発 >Golang >「time.Parse」を使用して異なるタイムゾーンを指定しているにもかかわらず、Go コードが常に UTC 時間を返すのはなぜですか?

「time.Parse」を使用して異なるタイムゾーンを指定しているにもかかわらず、Go コードが常に UTC 時間を返すのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-29 11:28:12933ブラウズ

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

タイムゾーン コードの解析: 詳しい説明

タイムゾーン コードを解析する以前の試みでは、以下のコードは常に結果「[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.LoadLocation(timezone) は、指定されたタイムゾーンの場所を読み込みます。
  • time.ParseInLocation( 「15:04:05 MST」、「05:00:00」、場所)時間を解析します指定されたタイムゾーンの場所の「05:00:00」。これにより、意図したタイムゾーンで正しい時刻が得られます。

以上が「time.Parse」を使用して異なるタイムゾーンを指定しているにもかかわらず、Go コードが常に UTC 時間を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。