【Rails】Time関連のクラスがたくさんあるけど、どれを使うべきなのか結論だけ述べる

2020.03.08 Rails
【Rails】Time関連のクラスがたくさんあるけど、どれを使うべきなのか結論だけ述べる

RailsやRubyのTime系のクラス、たくさんありますよね。ただ、どれを使えばいいのか、それぞれにどんな違いがあるのかちょっとわかりづらかったので、とりあえず結論だけ書きます。

Time.zone.withクラスを使え

はい、これだけです。なぜこれなのかについては紹介している記事を超える解説ができそうにないので託すことにします。

# 現在時刻を取得する
Time.current
=> Wed, 15 Jan 2020 13:18:07 UTC +00:00

# classを確認する
Time.current.class
=> ActiveSupport::TimeWithZone

# string型に変換
Time.current.strftime("%F")
=> "2020-01-15"

Time.zone.parse('2020-01-01')
=> Wed, 01 Jan 2020 00:00:00 UTC +00:00

Time.zone.parse('2020-01-01 12:00:00')
=> Wed, 01 Jan 2020 12:00:00 UTC +00:00

# 現在時刻をもとに新しいTimeWithZoneを作成する
Time.zone.parse("#{Time.current.strftime('%F')} #{Time.current.hour}:00:00")
=> Wed, 15 Jan 2020 13:00:00 UTC +00:00

他のクラスだと何がいけないのか?

簡単にいうと、結果が変わってしまいます。というのも、Timeクラスなどの場合は基本的にUNIXタイムでかつ9時間ずれが起きてしまいます。そのため、検索や抽出条件で利用すると、日本時間と9時間分ズレが生じてしまうので、結構酷いトラブルにも繋がってしまいます。

そのため、ここでは結論しか書いていませんが、違いについてはしっかりと説明できるようになっておきましょう。他の人が認識を間違っていたら、教えてあげましょう。

参考記事




halmuda

愛知在住。社内SEの仕事に疲れて独学でプログラミング を勉強してエンジニアに転身。自社サービス開発。スポ根漫画全般とピロウズと麻雀が好き。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です