私の経験では、プログラミング時に日付/時刻を正しく取得することは常に危険と困難をはらんでいます。
RubyとRailsは、圧倒的な数の選択肢があるからといって、いつもこれを避けてきました。私は私が選ぶべきアイデアがありません。
私がRailsを使っていてActiveRecordのデータ型を見ると、私は以下のものを見つけることができます。
:datetime、:timestamp、:time、および:date
そして何が違うのか、どこにゴチャが潜んでいるのかわかりません。
違いは何ですか?何に使うのですか?
(P.S:私はRailsを使っています3)
ActiveRecordのさまざまな日付/時刻フォーマットの違いは、Railsとほとんど関係がなく、使用しているデータベースに関係がありません。
MySQLを例として使用します(最も一般的であるために他に理由がない場合)、DATE
name__、DATETIME
name__、TIME
name__、およびTIMESTAMP
name__の列データ型があります。 CHAR
name__、VARCHAR
name__、FLOAT
name__およびINTEGER
name__があるように。
それで、あなたは尋ねます、違いは何ですか?まあ、それらのいくつかは自明です。 DATE
name__は日付のみを格納し、TIME
name__は時刻のみを格納し、DATETIME
name__は両方を格納します。
DATETIME
name__とTIMESTAMP
name__の違いはもう少し微妙です。DATETIME
name__はYYYY-MM-DD HH:MM:SS
としてフォーマットされます。有効範囲は1000年から9999年まで(およびその間のすべてです。データベースから取得する場合、TIMESTAMP
name__はに似ていますが、実際には単なる前線です。 nix timestamp 。その有効範囲は1970年から2038年です。ここでの違いは、データベースエンジン内のさまざまな組み込み関数を除いて、記憶域です。DATETIME
name__は、年、月日の各桁を格納するためです。 TIMESTAMP
name__は、1970年1月1日からの秒数のみを格納するため、4バイトを使用します。
MySQLの時間フォーマットの違いについてもっと読むことができます ここ 。
結局、それはあなたがあなたの日付/時刻列をするのに必要なものに帰着します。 1970年以前または2038年以降の日付と時刻を保存する必要がありますか? DATETIME
name__を使用してください。データベースのサイズを気にする必要はありますか。その期間内ですか? TIMESTAMP
name__を使用してください。あなただけの日付を保存する必要がありますか? DATE
name__を使用してください。あなただけの時間を保存する必要がありますか? TIME
name__を使用してください。
これをすべて言ったので、Railsは実際にこれらの決定のいくつかをあなたのために行います。 :timestamp
と:datetime
は両方ともデフォルトでDATETIME
name__になりますが、:date
と:time
はそれぞれDATE
name__とTIME
name__に対応します。
つまり、Rails内では、日付、時刻、またはその両方を保存する必要があるかどうかを判断するだけで済みます。
:日時(8バイト)
:タイムスタンプ(4バイト)