1. ホーム
  2. ルビー

[解決済み】RubyのDateTimeとTimeの違いについて

2022-04-04 15:22:24

質問

とはどう違うのですか? DateTimeTime と、どちらを選ぶべきかの判断材料は何でしょうか?

どのように解決するのですか?

新しいバージョンのRuby(2.0以上)では、この2つのクラスの間に大きな違いはありません。歴史的な理由でどちらかを使うライブラリもありますが、新しいコードでは必ずしも気にする必要はありません。一貫性を保つためにどちらかを選択することがおそらく最善であり、ライブラリが期待するものと一致するようにしてください。例えば、ActiveRecordはDateTimeを好みます。

Ruby 1.9 より前のバージョンや多くのシステムでは、時刻は 1970 年 1 月 1 日 (UTC) からの秒数を表す 32 ビット符号付き値として表現されます。 time_t の値であり、境界が設定されています。

Time.at(0x7FFFFFFF)
# => Mon Jan 18 22:14:07 -0500 2038
Time.at(-0x7FFFFFFF)
# => Fri Dec 13 15:45:53 -0500 1901

Rubyの新しいバージョンでは、より大きな値でもエラーを出さずに処理できるようになっています。

DateTimeはカレンダー方式で、年、月、日、時、分、秒が個別に保存されます。これはRuby on Railsの構造体で、SQL標準のDATETIMEフィールドのラッパーとして機能します。これらは任意の日付を格納し、式の範囲が一般に非常に大きいため、ほぼすべての時点を表すことができます。

DateTime.new
# => Mon, 01 Jan -4712 00:00:00 +0000

だから、DateTimeがAristotleのブログ記事を扱えるのは心強いです。

どちらかを選ぶ場合、その違いは今ややや主観的なものとなっています。歴史的にはDateTimeの方がカレンダー方式で操作するための優れたオプションを提供してきましたが、少なくともRails環境内では、これらのメソッドの多くがTimeにも移植されています。