私が書いた
Go言語プログラミング入門 on Google App Engineにも記述していないので、ここに載せておきたいと思います。
書籍内だとデータストアに日付を登録する時に、以下のような記述をしています。
datastore.SecondsToTime(time.Seconds())
これは、現在日時が取得されて日付がdatastore.Time型(中身は整数)に変換されます。
確かに現在日時であれば、これで良いのですが、指定した日時を格納したい場合に
この方法では日時のデータに変換することができません。
したがって、他の言語と同様に、文字列から日時データに変換します。
以下のような記述にします。
strdate := "2011-12-18 23:00:00"
inputtime := time.Parse("2006-01-02 15:04:05", startdatestr)
datastore.SecondsToTime(inputtime.Seconds())
これは、年:4桁、月:2桁、日:2桁、24時間表記の時間、2桁の分、2桁の秒となります。
time.Parse関数の第1引数がフォーマットを指定するのですが、標準で用意されている
フォーマットもあります。以下、timeパッケージのformat.goからの抜粋です。
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 1504 MST"
// RFC822 with Zulu time.
RFC822Z = "02 Jan 06 1504 -0700"
RFC850 = "Monday, 02-Jan-06 15:04:05 MST"
RFC1123 = "Mon, 02 Jan 2006 15:04:05 MST"
RFC3339 = "2006-01-02T15:04:05Z07: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"
)
RFC準拠のフォーマットであれば、"RFC3339"などと指定することで書式に合わせて文字列を解析し、変換してくれます。
JavaやC#などと違って"yyyy/MM/dd HH:mm:ss"というフォーマットが指定できないのが大変ですが、慣れると意外と良いかもしれません。