1. ホーム
  2. ruby-on-rails

[解決済み] Ruby on Railsで、DateTime、Timestamp、Time、Dateの違いは何ですか?

2022-03-22 05:41:57

質問

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

RubyとRailsについては、選択肢が多すぎてどれを選べばいいのかわからないということもあり、いつも迷ってしまいます。

Railsを使っていて、ActiveRecordのデータ型を見ていると、次のようなものがあります。

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

で、何が違うのか、どこにゴチャゴチャが潜んでいるのか、さっぱりわからない。

何が違うの?何に使うの?

(追伸:Rails3を使っています)

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

ActiveRecordの日付/時刻フォーマットの違いは、Railsにはほとんど関係なく、使用しているデータベースにすべて関係します。

MySQL を例にとると (もっとも一般的な理由でなければ)、次のようになります。 DATE , DATETIME , TIMETIMESTAMP カラムデータ型; ちょうど CHAR , VARCHAR , FLOATINTEGER .

では、何が違うのかって?まあ、自明なものもありますが。 DATE は日付のみを格納します。 TIME は時間帯だけを格納し DATETIME には両方が格納されます。

との違いは DATETIMETIMESTAMP はちょっと微妙ですね。 DATETIME は次のような書式になります。 YYYY-MM-DD HH:MM:SS . 有効な範囲は1000年から9999年まで(とその間のすべて)です。ただし TIMESTAMP ルックス データベースから取得したときは同じようなものですが、実際には ユニックスタイムスタンプ . その有効範囲は1970年から2038年までです。データベースエンジン内の様々な組み込み機能を除けば、ここでの違いはストレージスペースである。なぜなら DATETIME は、年、月、日、時、分、秒のすべての桁を格納するため、合計8バイトを使用します。そのため TIMESTAMP は1970-01-01からの秒数のみを格納するため、4バイトを使用します。

MySQLの時刻フォーマットの違いについては、以下をご参照ください。 ここで .

結局のところ、日付/時刻カラムに何をさせるか、ということに尽きます。

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

ここまで言っておいてなんですが Railsは実際にこれらの決定のいくつかをあなたに代わって行います。 . どちらも :timestamp:datetime はデフォルトで DATETIME 一方 :date:timeDATETIME それぞれ

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