日本でローカルで普通に動かすとtime.Now()はJSTになるのですが、Google App Engineの開発サーバーdev_appserver.pyや http://play.golang.org/ ではUTCになります。
以下のようにすればJSTに変換できます。
- time.FixedZone(name string, offset int) *Locationでタイムゾーンを作成
- func (t Time) In(loc *Location) Timeを使って指定したタイムゾーンでの日時を取得
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println(now.Format(time.RFC3339))
nowUTC := now.UTC()
fmt.Println(nowUTC.Format(time.RFC3339))
// This fails with "panic: unknown time zone Asia/Tokyo" at play.golang.org
// jst, err := time.LoadLocation("Asia/Tokyo")
//if err != nil {
// panic(err)
//}
jst := time.FixedZone("Asia/Tokyo", 9*60*60)
nowJST := nowUTC.In(jst)
fmt.Println(nowJST.Format(time.RFC3339))
// results at local
// 2013-09-30T02:21:12+09:00
// 2013-09-29T17:21:12Z
// 2013-09-30T02:21:12+09:00
//
// results at http://play.golang.org/
// 2009-11-10T23:00:00Z
// 2009-11-10T23:00:00Z
// 2009-11-11T08:00:00+09:00
}
func LoadLocation(name string) (*Location, error)も試してみたのですが、play.golang.org ではAsia/Tokyoはunkown time zoneとエラーになってしまいました。
http://play.golang.org/p/-e7unXO1f9 このリンクをクリックするとGo playgroundで試せます。