Time.nowだとUTC/世界標準時になってしまうので、JSTを使いたいときはTime.currentを使っときましょうという話。

今何時、そうねだいたいね(JST/UTC+0900)

さて、Railsアプリのデータベースをcronでもって定期バックアップをすることにしまして、それはそれで別記事にまとめますが、cronが実行するRailsTaskで書き出されたアーカイブデータのファイル名がUTCになってしょうがなかったので、ちょっと悩みました。

hoge = Time.now.strftime("%Y%m%d%H%M%S")
p hoge
>20210805050205

こんなの早朝じゃん。5時じゃん。寝てるじゃん。

というわけで、Dockerfileやdocker-compose.ymlのタイムゾーン設定を見直したり、cronを再起動したり。
コンテナの中でdateしてもちゃんとJSTが表示されるのでしばし混乱タイム。

Time.currentに変えてみたらあっさり解決した

解決

fuga = Time.current.strftime("%Y%m%d%H%M%S")
p fuga
>20210805160205

これやこれや。わいはこれを求めてたんや

【Rails】Time.currentとTime.nowの違い – Qiita

Time.currentを使う場合、普通のTimeクラスではなくTimeWithZone(Railsが用意したClass)が使われるそうな。
つまり、Time.nowで参照される環境変数TZが渡せていなかったってことなんですかね。

とりあえず解決🏆

公開日