Goでタイムゾーンを変えたい場合はfunc (Time) Inを使います。
package main
import "time"
const location = "Asia/Tokyo"
func main() {
loc, err := time.LoadLocation(location)
if err != nil {
loc = time.FixedZone(location, 9*60*60)
}
now := time.Now().In(loc)
}
このようにタイムゾーンを変更したい処理が一箇所ならいいのですが、複数あると面倒な上に変更漏れがあるとバグの原因を見付けるのが大変です。そんな時はtime.Local
でローカルのタイムゾーンを変更してしまいます。
var Local *Location = &localLoc
> Local represents the system's local time zone.
```go
package main
import "time"
const location = "Asia/Tokyo"
func init() {
loc, err := time.LoadLocation(location)
if err != nil {
loc = time.FixedZone(location, 9*60*60)
}
time.Local = loc
}
func main() {
now := time.Now()
}
ただし、time.Timeから日付だけを取り出すで指摘されているようにfunc (Time) Truncateはタイムゾーンが考慮されていません。他にも同様のメソッドがあるかもしれませんので、時間が正しい事の確認は確実に行ってください。