時間を表す少なくとも 3 つのタイプがあります: Time
、Date
およびDateTime
(from ActiveSupport
)。
私の問題は、DateTime
完全に置き換えることができDate
ますか? つまり、 を使用できる場合、代わりDateTime
に使用する理由はありますか?Date
require 'date'
d = Date.today
dt = DateTime.now
p Date.public_methods - DateTime.public_methods
#=>[:today]
p DateTime.public_methods - Date.public_methods
#=>[:now]
p d.public_methods - dt.public_methods
#=>[]
p dt.public_methods - d.public_methods
#=>[:hour, :min, :minute, :sec, :second, :sec_fraction, :second_fraction, :offset, :zone, :new_offset]
DateTime は Date のサブクラスです。DateTime を使用すると、today
Class メソッドが失われ、代わりに取得now
されます。インスタンス メソッドが失われることはありません。
たとえば、誕生日やイベントが行われる特定の日など、日付のみを保存する場合は、日付のみを使用する方が簡単です。そうすれば、タイム ゾーンの違いやタイム ゾーンの計算に起因する問題がなくなります。DateTime を使用する場合、午前 0 時から -2 時間のオフセットを追加すると、前日の午後 10 時になります。
Date は、タイムゾーンとともに、時間に関する情報を保存しません。したがって、ある時点で時間データを使用する必要がある場合、問題が発生する可能性があります。
このリンクを参照してください。どのクラスをいつ、どのように使用する必要があるかが明確にわかりました。