ホームページ > バックエンド開発 > Golang > なぜ、't Go' の `Time.Parse` は常にタイムゾーン情報を尊重しないのでしょうか?

なぜ、't Go' の `Time.Parse` は常にタイムゾーン情報を尊重しないのでしょうか?

Barbara Streisand
リリース: 2024-11-19 09:08:02
オリジナル
352 人が閲覧しました

Why Doesn't Go's `Time.Parse` Always Respect Timezone Information?

Time.Parse: 正確な解析でタイムゾーン迷路をナビゲートする

Go の時間操作は、堅牢な機能セットを提供します。 time パッケージの重要な関数である Time.Parse は、時間値を表す文字列を Go の内部時間構造に注意深く変換するために利用されます。しかし、Time.Parse で時刻を解析するときに、多くの開発者は、なぜ常にタイムゾーン情報を考慮しないのか?

不一致の解明

へ動作を説明するために、次のコード スニペットを調べてみましょう:

package main

import (
    "fmt"
    "time"
)

func main() {
    t, err := time.Parse("2006-01-02 MST", "2018-05-11 IST")
    if err != nil {
        return
    }
    t2, err := time.Parse("2006-01-02 MST", "2018-05-11 UTC")
    if err != nil {
        return
    }
    fmt.Println(t.Unix())
    fmt.Println(t2.Unix())
}
ログイン後にコピー

直感的には、タイム ゾーンの違いにより、出力タイムスタンプが異なることが予想されます。驚くべきことに、IST と UTC の間に明確なオフセットがあるにもかかわらず、コードは両方のタイムスタンプに同じ値を生成します。

理論的根拠の詳細

この動作の背後にある理由は次のとおりです。 Parse 関数で使用される時間レイアウトに明示的なタイムゾーン情報が存在しない。デフォルトでは、Parse は不明なタイムゾーンの略語をオフセット 0 の仮想の場所として扱い、IST で指定されたオフセットを事実上無視します。その結果、両方のタイムスタンプは UTC タイムゾーンにあるものとして解析され、同じ Unix タイムスタンプ値になります。

タイムゾーンの複雑さをナビゲートする

この問題に対処し、時刻を解析するには正確なタイムゾーン情報。いくつかのオプションが自由に利用できます:

1.明示的な数値オフセットを指定する:

タイムゾーンの略語に依存する代わりに、時間レイアウトでオフセットを明示的に指定します。例:

t, err := time.Parse("2006-01-02 -0700", "2018-05-11 +0530")
ログイン後にコピー

2. ParseInLocation:

ParseInLocation 関数を利用すると、解析用のカスタム タイムゾーンの場所を指定できます。この手法により、タイムゾーンの処理をより詳細に制御できます。例:

loc, err := time.LoadLocation("Asia/Kolkata")
t, err := time.ParseInLocation("2006-01-02 MST", "2018-05-11 IST", loc)
ログイン後にコピー

これらの戦略を採用すると、正しいタイムゾーン情報を含む時間値を効果的に解析でき、さまざまなシナリオで正確な時間操作が可能になります。

以上がなぜ、't Go' の `Time.Parse` は常にタイムゾーン情報を尊重しないのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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