Go で日付文字列を解析する方法

Suraj Joshi 2023年12月11日
  1. Go での日付と時刻の表現
  2. Go で日付文字列を解析する
Go で日付文字列を解析する方法

日付の解析は、プログラミングの世界で遭遇する最も一般的なタスクの 1つです。Go は、コードを使用して日付/時刻文字列表現の一部を表す他のプログラミング言語とは異なり、標準の日付を使用します。Go での解析は、time パッケージの Parse 関数と Format 関数を使用して行われます。

Go での日付と時刻の表現

Go で日付を解析するには、レイアウトと呼ばれるものを使用します。Go には日付を解析する際に覚えておかなければならない標準時間があります。

Mon Jan 2 15:04:05 MST 2006

2006 年 1 月 2 日 15 時 04 分 05 秒、UTC-0700 です。

Go で日付文字列を解析する

日付文字列を解析するには、このレイアウトを time.Parse 関数に渡します。parse 関数で文字を使用して日付を指定せずに形式としてリアルタイムを使用しているため、parse 関数は非常に興味深いものになっています。

time.Parse 関数は、最初の引数として時間形式のプレースホルダーと 2 番目の引数として時間を表す実際のフォーマットされた文字列で構成されるレイアウトを取ります。

package main

import (
    "fmt"
    "time"
)

func main() {
    timeT, _ := time.Parse("2006-01-02", "2020-04-14")
    fmt.Println(timeT)

    timeT, _ = time.Parse("06-01-02", "20-04-14")
    fmt.Println(timeT)

    timeT, _ = time.Parse("2006-Jan-02", "2020-Apr-14")
    fmt.Println(timeT)

    timeT, _ = time.Parse("2006-Jan-02 Monday 03:04:05", "2020-Apr-14 Tuesday 23:19:25")
    fmt.Println(timeT)

    timeT, _ = time.Parse("2006-Jan-02 Monday 03:04:05 PM MST -07:00", "2020-Apr-14 Tuesday 11:19:25 PM IST +05:30")
    fmt.Println(timeT)
}

出力:

2020-04-14 00:00:00 +0000 UTC
2020-04-14 00:00:00 +0000 UTC
2020-04-14 00:00:00 +0000 UTC
0001-01-01 00:00:00 +0000 UTC
2020-04-14 23:19:25 +0530 IST

Go のパッケージには、事前に定義された時間レイアウト定数があります。

定数 レイアウト
ANSIC "Mon Jan _2 15:04:05 2006"
UnixDate "Mon Jan _2 15:04:05 MST 2006"
RubyDate "Mon Jan 02 15:04:05 -0700 2006"
RFC822 "02 Jan 06 15:04 MST"
RFC822Z "02 Jan 06 15:04 -0700"
RFC850 "Monday, 02-Jan-06 15:04:05 MST"
RFC1123 "Mon, 02 Jan 2006 15:04:05 MST"
RFC1123Z "Mon, 02 Jan 2006 15:04:05 -0700"
RFC3339 "2006-01-02T15:04:05Z07:00"
RFC3339Nano "2006-01-02T15:04:05.999999999Z07:00"
Stamp "3:04PM"
StampMilli "Jan _2 15:04:05.000"
StampMicro "Jan _2 15:04:05.000000"
StampNano "Jan _2 15:04:05.000000000"

レイアウト文字列の代わりに上記の定義済み定数を使用して日時を解析できます。

package main

import (
    "fmt"
    "time"
)

func main() {
    timeT, _ := time.Parse(time.RFC3339, "2020-04-15T13:45:26Z")
    fmt.Println(timeT)
}

出力:

2020-04-15 13:45:26 +0000 UTC

time.Time タイプがある場合、Format 関数を使用してそれを string に変換します。

package main

import (
    "fmt"
    "time"
)

func main() {
    input := "2020-04-14"
    layout := "2006-01-02"
    t, _ := time.Parse(layout, input)
    fmt.Println(t)
    fmt.Println(t.Format("02-Jan-2006"))

}

出力:

2020-04-14 00:00:00 +0000 UTC
14-Apr-2020
著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

関連記事 - Go String