golangでtime.Parse()を使ってstring型をdate型に型変換する方法


環境

  • Go 1.15

やりたいこと

Excelから日付をstring型で持ってきた時は2011/8/10のようになっている。
toDate()関数を使ってgolangのdate型にしたい

結論

ポイントはlayoutを狂いなく2006/1/2に設定すること。
例えばlayout2006/1/3とかにするとエラーになる。

parseDate.go
strVal := 2011/8/10
layout := "2006/1/2"
timeVal, err := time.Parse(layout, strVal)

詰まったポイント

2011/8/10を0埋めして2011/08/10にする処理が必要だと思ってた。
わざわざ0埋めする関数padNumberWithZeroを作った。

func padNumberWithZero(value string) string {
    i, _ := strconv.Atoi(value)
    return fmt.Sprintf("%02d", i)
}

しかしそれでもエラーが発生した

エラー内容

2021/06/04 07:39:49 parsing time "2011/08/10" as "2011/09/01": cannot parse "/08/10" as "1"2011/8/10

まとめ

golangでtime.Parse()を使いたい時は第一引数にはgolangが定めている日付や時間と全く同じlayoutを指定しないといけないから注意(分かりにくすぎるし面倒くさい、、、)

参考 https://golang.org/src/time/format.go