Ruby on Rails では、DateTime、Timestamp、Time、Date の違いは何ですか? 質問する

Ruby on Rails では、DateTime、Timestamp、Time、Date の違いは何ですか? 質問する

私の経験では、プログラミング時に日付/時刻を正しく取得することは、常に危険と困難を伴います。

Ruby と Rails は、選択肢が多すぎてどれを選べばいいのかまったくわからないため、これまでずっと迷っていました。

Railsを使用してActiveRecordのデータ型を見ると、次のようなことがわかります。

:datetime、:timestamp、:time、および :date

違いが何なのか、どこに落とし穴があるのか​​全く分かりません。

違いは何ですか?何に使いますか?

(追記: Rails3 を使用しています)

ベストアンサー1

ActiveRecord のさまざまな日付/時刻形式の違いは、Rails とはほとんど関係がなく、使用しているデータベースにすべて関係します。

MySQL を例に挙げると (他の理由がない限り、最も人気があるからです)、、、および の列データ型がありますDATE。またDATETIME、、、およびもあります。TIMETIMESTAMPCHARVARCHARFLOATINTEGER

では、違いは何かと疑問に思うかもしれません。いくつかは説明不要です。DATEは日付のみを保存し、TIMEは時刻のみを保存しますが、 はDATETIME両方を保存します。

DATETIMEとの違いはTIMESTAMPもう少し微妙です。DATETIMEは としてフォーマットされますYYYY-MM-DD HH:MM:SS。有効な範囲は 1000 年から 9999 年までです (その間のすべて)。データベースから取得すると は似ていますがTIMESTAMP 実際には の単なる前置きです。UNIXタイムスタンプ有効範囲は 1970 年から 2038 年です。データベース エンジン内のさまざまな組み込み関数とは別に、ここでの違いはストレージ スペースです。 はDATETIME年、月、日、時、分、秒のすべての桁を格納するため、合計 8 バイトを使用します。 はTIMESTAMP1970-01-01 からの秒数のみを格納するため、4 バイトを使用します。

MySQLの時刻形式の違いについて詳しくはこちらをご覧ください。ここ

結局のところ、日付/時刻列に何を実行する必要があるかが重要になります。

  • 1970 年以前、または 2038 年以降の日付と時刻を保存する必要がありますか? => を使用しますDATETIME
  • データベースのサイズを気にする必要があり、その時間範囲内ですか? => を使用しますTIMESTAMP
  • 日付のみを保存する必要がありますか? => を使用しますDATE
  • 時間だけを保存する必要がありますか? => を使用しますTIME

とはいえ、実際には Rails がこれらの決定の一部を行います:timestampと は両方ともが:datetimeデフォルトとなりDATETIME、と はそれぞれと に対応します。:date:timeDATETIME

つまり、Rails 内では、日付、時刻、またはその両方を保存する必要があるかどうかを決定するだけで済みます。

おすすめ記事