golangの日付変換が独特だった

2013-11-19  /  Go

golangの日付の処理をする時には、timeパッケージを使う。

日付と文字列の相互変換

string から Time

time.Parse を使用する。
time - The Go Programming Language

func Parse(layout, value string) (Time, error)

Time から string

Time型のFormatを使用する。
time - The Go Programming Language

func (t Time) Format(layout string) string

ParseとFormatの引数も特別なこともなく、他の言語と似て特に難しいことも無い。

と思っていたけど、ちょっとはまってしまった。

layoutの書き方が変わっている

書式を指定する時には、yyyy/mm/ddとか書かずに、実データっぽく書く。例えば、規定の定数値は以下のようになっている。


const (
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” // RFC822 with numeric zone
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” // RFC1123 with numeric zone
RFC3339 = “2006-01-02T15:04:05Z07:00”
RFC3339Nano = “2006-01-02T15:04:05.999999999Z07:00”
Kitchen = “3:04PM”
// Handy time stamps.
Stamp = “Jan _2 15:04:05”
StampMilli = “Jan _2 15:04:05.000”
StampMicro = “Jan _2 15:04:05.000000”
StampNano = “Jan _2 15:04:05.000000000”
)

YYYYとかMMとかない。

てっきりParseが賢くて、適当に実データを書いておくと、書式を理解するのかと勘違いしたが、結果のデータがおかしいので、constを見てようやく理解した次第。

見た感じ以下のような対応と考えていて良さそう。

1 = 月
2 = 日
3 = 時
4 = 分
5 = 秒
6 = 年
7 = 時差

年が2006だったり、時が15だったりするので、その辺慣れないと間違えちゃうかな。この辺り、ドキュメントにはちゃんと書いてないと思われる。

Published: 2013-11-19  /  Tags: Go  /  Share: X