Goの`time.Parse`で時間の解析をマスターする
Emily Parker
Product Engineer · Leapcell

Key Takeaways
- Goの
time.Parse
は、日付文字列を解釈するために参照時間形式を使用します。 - レイアウトとタイムゾーンの不一致は、解析エラーにつながる可能性があります。
- 適切なフォーマットは、アプリケーションでの正確な時間操作を保証します。
Goプログラミングでは、文字列を時間オブジェクトに解析することは一般的なタスクであり、さまざまな形式で日付と時刻を処理する際にしばしば必要となります。time
パッケージは、この変換を容易にするための Parse
関数を提供します。time.Parse
を効果的に活用する方法を理解することは、Goアプリケーションでの正確な時間操作に不可欠です。
time.Parse
を理解する
Goの time.Parse
関数は、与えられた文字列を指定されたレイアウトに従って解釈し、対応する time.Time
の値を返します。関数のシグネチャは以下の通りです。
func Parse(layout, value string) (Time, error)
layout
: 入力時間文字列の形式を定義する文字列。value
: 解析される実際の時間文字列。
レイアウトの定義
Goでは、レイアウトを定義するために独自のアプローチを使用します。参照時間を、入力文字列が従うことを期待する特定のパターンでフォーマットします。参照時間は次のとおりです。
Mon Jan 2 15:04:05 MST 2006
この参照時間の各コンポーネントは、特定の時間または日付要素に対応します。
2006
: 年01
: 月02
: 日15
: 時 (24時間制)04
: 分05
: 秒MST
: タイムゾーン
たとえば、「日/月/年 時:分:秒」の形式で日付がある場合(例: 「07/25/2019 13:45:00」)、対応するレイアウトは次のようになります。
layout := "02/01/2006 15:04:05"
時間文字列の解析
上記のレイアウトを使用して、文字列「07/25/2019 13:45:00」を解析するには:
package main import ( "fmt" "time" ) func main() { layout := "02/01/2006 15:04:05" timeStr := "25/07/2019 13:45:00" _, err := time.Parse(layout, timeStr) 解析された時間, err := time.Parse(layout, timeStr) if err != nil { fmt.Println("時間解析エラー:", err) return } fmt.Println("Parsed time:", 解析された時間) }
これは次のように出力されます:
Parsed time: 2019-07-25 13:45:00 +0000 UTC
異なる時間形式の処理
時間文字列に異なるコンポーネントが含まれている場合は、それに応じてレイアウトを調整します。たとえば、「hh
layout := "03:04 PM" timeStr := "11:22 PM" t, err := time.Parse(layout, timeStr)
この場合、レイアウトは時間の 03
、分の 04
、および時刻の期間を示す PM
を使用します。このアプローチは、時間の長さを扱う場合に特に役立ちます。たとえば、真夜中からの秒数を計算するには:
package main import ( "fmt" "time" ) func main() { layout := "03:04 PM" ref, _ := time.Parse(layout, "12:00 AM") _, err := time.Parse(layout, "11:22 PM") 時刻, err := time.Parse(layout, "11:22 PM") if err != nil { fmt.Println("時間解析エラー:", err) return } fmt.Println("真夜中からの秒数:", 時刻.Sub(ref).Seconds()) }
これは次のように出力されます:
Seconds since midnight: 84120
この計算では、真夜中から午後11時22分までの合計秒数が決定されます。
よくある落とし穴
- レイアウトと値の不一致: レイアウト文字列が時間文字列の形式と正確に一致するようにしてください。不一致は、解析エラーにつながります。
- タイムゾーン: 時間文字列にタイムゾーンが含まれている場合、レイアウトは
MST
または-0700
形式を使用してそれを考慮する必要があります。 - 先頭のゼロ: レイアウトでは、1桁の月、日、時、分、秒に先頭のゼロが必要です。たとえば、1月は
1
ではなく01
として表す必要があります。
結論
time.Parse
関数は、文字列を time.Time
オブジェクトに変換するためのGoの強力なツールです。参照時間に基づいて適切なレイアウトを定義することで、さまざまな日付と時刻の形式を正確に解析し、アプリケーションで効果的な時間操作を可能にできます。
FAQs
Goは、日付形式を解釈するために固定された参照時間(Mon Jan 2 15:04:05 MST 2006
)を使用します。
レイアウトにタイムゾーンを含めます。例: `