ホームページ > バックエンド開発 > Golang > タイムゾーンが関係している場合、Go の `time.Parse` が文字列を `time.Time` インスタンスに変換できないのはなぜですか?

タイムゾーンが関係している場合、Go の `time.Parse` が文字列を `time.Time` インスタンスに変換できないのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-17 00:50:03
オリジナル
213 人が閲覧しました

Why does `time.Parse` in Go fail to convert a string to a `time.Time` instance when timezone is involved?

time.Parse の動作を理解する

Go の time パッケージの Parse メソッドを使用して文字列を time.Time インスタンスに変換すると、次のようになります。タイムゾーンを考慮し、適切な形式文字列を指定することが重要です。次のコードは、タイムゾーンの処理が正しくないため、期待どおりに文字列を time.Time に変換できません:

import (
    "fmt"
    "time"
)

func main() {
    const longForm = "2013-05-13T18:41:34.848Z"
    t, _ := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700 PDT")
    fmt.Println(t)
}
ログイン後にコピー

このコードでは、期待される値ではなく 0001-01-01 00:00:00 0000 UTC が出力されます。 2013-05-13 01:41:34.848 0000 UTC.

解決策: 正しい書式文字列を指定してください

誤った動作は、書式指定文字列が正しくないことが原因で発生します。 longForm は、入力文字列の形式に一致するように定義する必要があります:

const longForm = "2006-01-02 15:04:05 -0700"
ログイン後にコピー

この形式文字列は、入力文字列の形式に対応します: 2013-05-13 18:41:34.848 -0700 PDT。

更新されたコード:

import (
    "fmt"
    "log"
    "time"
)

func main() {
    const longForm = "2006-01-02 15:04:05 -0700"
    t, err := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700 PDT")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(t)
}
ログイン後にコピー

正しい形式文字列を使用すると、コードは予想時刻を出力するようになります: 2013-05-13 01:41:34.848 0000 UTC .

以上がタイムゾーンが関係している場合、Go の `time.Parse` が文字列を `time.Time` インスタンスに変換できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート