ホームページ > バックエンド開発 > Golang > Go の「time.Parse」がタイムゾーン情報を無視するのはなぜですか?

Go の「time.Parse」がタイムゾーン情報を無視するのはなぜですか?

Linda Hamilton
リリース: 2024-11-21 20:02:15
オリジナル
916 人が閲覧しました

Why Does Go's `time.Parse` Ignore Timezone Information?

Time.Parse がタイムゾーン情報を使用しない理由

time.Parse 関数は、時間文字列を解析し、対応する時刻文字列を生成するように設計されています。 time.Value オブジェクト。ただし、タイムゾーン情報は考慮されません。この動作により、タイムゾーンの略語を含む時刻文字列を解析するときに予期しない結果が生じる可能性があります。

次のコード スニペットを考えてみましょう:

import "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())
}
ログイン後にコピー

このコードは、2 つの時刻文字列「2018-05-11」を解析します。 IST」および「2018-05-11 UTC」を抽出し、結果の時刻値の Unix タイムスタンプを出力します。ただし、出力は驚くべきものです。

1525996800
1525996800
ログイン後にコピー

タイム文字列が異なるタイムゾーンを参照しているにもかかわらず、両方のタイムスタンプは同じです。これは、time.Parse が時刻文字列を解析するときにタイムゾーン情報を無視するためです。時刻文字列はローカル タイムゾーンにあるかのように処理され、タイムゾーン オフセットは調整されません。

この問題を解決するには、次のいずれかの方法を使用できます:

  • 数値のゾーン オフセットを含む時間レイアウトを使用します。 たとえば、次のレイアウトを使用できます:「2006-01-02」 -0700」。このレイアウトでは、時間文字列の一部としてタイム ゾーン オフセット (この場合は -0700) を指定します。
  • time.ParseInLocation 関数を使用します。 この関数は位置引数を受け取り、時間文字列を解析するときに使用するタイムゾーン。
  • 次を使用してカスタム タイムゾーンを作成します。 time.FixedZone. これにより、特定のタイムゾーンのタイムゾーン オフセットと略称を指定できます。その後、このカスタム タイムゾーンを time.Parse 関数の引数として使用できます。

以上がGo の「time.Parse」がタイムゾーン情報を無視するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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