【Go】JSTの時間をうまくParseする

2015-06-08

GoでJSTの時間の文字列を変換するときに困ったのでTipsとして残しておきます。

2015-06-08 15:04:05 +0900のように+0900とついていた場合2006-01-02 15:04:05 -0700をformatとしてParseすればうまくいきます

package main

import "fmt"
import "time"

func main() {
	target := `2015-06-08 15:04:05 +0900`
	t, _ := time.Parse(`2006-01-02 15:04:05 -0700`, target)
	fmt.Println(t.UTC())
}

上記は普通に指定すればできました。

問題はJSTで2015-06-08 15:04:05という値をParseしたい場合です。 色々実装をみてみたところ

package main

import "fmt"
import "time"

func main() {
	target := `2015-06-08 15:04:05`
    loc, _ := time.LoadLocation("Asia/Tokyo")
	t, _ := time.ParseInLocation (`2006-01-02 15:04:05`, target, loc)
	fmt.Println(t.UTC())
}

time#ParseInLocationでlocationを指定してParseできるようでした。

あやうくParseしたい文字列に+0900の文字列追加したり、time.Date(t.Year(),...,loc)のようにするところでした。