datetime,time,dateの違いは何なのか調査した

前のRuby on Railsの記事を書いた時に調べる予定だった
「datetime,time,dateの違いは何なのか」について調べた。

muscleprogramers.hatenablog.com

Date型

曜日+日付のデータが出力される。

Tue, 20 Oct 2015

文字列で取得する場合

to_sメソッドで取得した場合、日付が出力される。

メリット

time型、string型、integer型への変換が可能。

Time型

日付+時刻のデータが出力される。

2015-10-20 19:22:41 +0900

文字列で取得する場合

to_sメソッドで取得した場合、日付+時間が出力される。

メリット

  • date型、string型、integer型への変換が可能。
  • Tライブラリを別途読み込む必要がない。
  • Datetimeより早い
  • サマータイムうるう秒が扱える
  • 数値の1の単位が秒なので、計算がしやすい。

DateTime型

曜日+日付+時刻のデータが出力される。

DateとTimeの表示形式を合わせたイメージ。

Tue, 20 Oct 2015 19:22:43 +0900

文字列で取得する場合

to_sメソッドで取得した場合、日付+時間が出力される。

メリット

  • 時差を確認できる。
  • 一番詳細な日時を出せる。

デメリット

  • 1の単位が日になるので、1時間が1/24、1分を1/(24*60)…という計算をしなくてはいけない。
  • Ruby2.3.0(2020年12月25日のリリース)から非推奨クラスになった。

結論

基本Time型を使用したほうがいい。

dateTimeは非推奨だし、dateはほぼtimeの下位互換なので

余程のことがない限りはtime型を使えばよい。

TimeWithZone型なんてものがあるらしい

RailsにはTimeWithZoneクラスが存在するらしい。

今後はこれを調べよう。