概要
日付のデータに関してデータベース上では、UTCで格納しているケースはけっこうあると思います。ただシステムは日本時間(JST)の世界で動いているので、例えばクエリで日付を絞り込むときにJSTの00:00:00から開始したいんだけど、DB上はUTCなのでその昨日日付の15:00:00からのデータが対象となります。
ということで、こういうケースの場合、どうやってGoで日付の実装をしていけば良いのかというのを紹介します。
対応例
- 取得するデータを日本時間の本日日付という前提で、まずはJSTの本日日付の00:00:00を取得します。Goでtime.Parseを使うときのタイムゾーンについてを参考に、まずは日本時間で
time.Now()
を取得し時刻部分の切り捨てを行います。例えば日本時間の2021/5/14に実行した場合は2021-05-14 00:00:00 +0900 Asia/Tokyo
と出力されます。
jst := time.FixedZone("Asia/Tokyo", 9*60*60)
currentTimeJst, _ := time.ParseInLocation("20060102", time.Now().In(jst).Format("20060102"), jst)
fmt.Println(currentTimeJst)
- では次に、上記で取得した日付をUTC時刻に変換します。日本時間の2021/5/14に実行した場合は
2021-05-13 15:00:00 +0000 UTC
となる想定です。実装としては、取得したJST日付でtime.UTC()
メソッドを呼べば良いです。
currentTimeUtc := currentTimeJst.UTC()
fmt.Println(currentTimeUtc)