Go での time.Parse の動作を理解する
Go で time.Parse メソッドを使用して文字列を time.Time 値に変換しようとすると、期待どおりの結果を得るには、正しい形式文字列を設定することが重要です。
次のコードを検討してください。スニペット:
package main import ( "fmt" "time" ) func main() { const longForm = "2013-05-13T18:41:34.848Z" //even this is not working //const longForm = "2013-05-13 18:41:34.848 -0700 PDT" t, _ := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700 PDT") fmt.Println(t) }
このコードは、longForm 形式の文字列を使用して、「2013-05-13 18:41:34.848 -0700 PDT」形式の文字列を解析しようとします。ただし、出力は予期しないものです: "0001-01-01 00:00:00 0000 UTC".
この動作を理解するには、time.Parse メソッドのデフォルトの参照時刻が " であることに注意することが重要です。 Mon Jan 2 15:04:05 MST 2006"、Unix 時間 1136239445 を表します。これは、フォーマット文字列は、それに応じて基準時間を表す必要があります。
指定されたコードでは、longForm フォーマット文字列が基準時間を誤って「2006-01-02 15:04:05 -0700」と表しています。この参照時間形式の不一致により、予期しない出力が発生します。
この問題を解決するには、参照時間と一致するようにlongForm形式文字列を変更する必要があります。
package main 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") if err != nil { log.Fatal(err) } fmt.Println(t) }
正しいlongFormを使用書式文字列、time.Parse メソッドは文字列を time.Time 値に正確に変換するようになりました: "2013-05-13 01:41:34.848 0000 UTC"。
以上がGo の「time.Parse」関数が予期しない時間値を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。