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 サイトの他の関連記事を参照してください。