回答:
ActiveRecordの異なる日付/時刻形式の違いは、Railsとはほとんど関係がなく、使用しているデータベースに関係します。
(もしそれが最も人気がありますので、他に理由がない)の例としてMySQLを使用して、あなたが持っているDATE
、DATETIME
、TIME
およびTIMESTAMP
列のデータ型。あなたが持っているようCHAR
にVARCHAR
、、、FLOAT
そしてINTEGER
。
それで、あなたは尋ねます、違いは何ですか?まあ、それらのいくつかは自明です。DATE
日付TIME
のみを格納し、時刻のみを格納し、DATETIME
両方を格納します。
差DATETIME
とはTIMESTAMP
少し微妙である。DATETIME
ようにフォーマットされますYYYY-MM-DD HH:MM:SS
。有効な範囲は、1000年から9999年まで(およびその間のすべて)です。データベースからフェッチする場合TIMESTAMP
は似ていますが、UNIXタイムスタンプの前線にすぎません。有効範囲は1970年から2038年までです。違いはここでは、組み込みのデータベース・エンジン内の機能、収納スペース、各種ある脇から。のでDATETIME
、毎年、月の日、時間、分の数字と第二、それは8バイトの合計を使用して保存する。としてはTIMESTAMP
唯一の番号を格納します1970-01-01以降の秒数で、4バイトを使用します。
MySQLの時刻形式の違いについて詳しくは、こちらをご覧ください。
結局のところ、それはあなたがあなたの日付/時間の列を行うために必要なものに帰着します。1970年より前または2038年より後の日付と時刻を保存する必要がありますか?を使用しDATETIME
ます。データベースのサイズについて心配する必要があり、その時間範囲内にいますか?を使用しTIMESTAMP
ます。日付を保存するだけで済みますか?を使用しDATE
ます。あなただけの時間を保存する必要がありますか?を使用しTIME
ます。
これらすべてを述べた上で、Railsは実際にこれらの決定のいくつかを行います。両方:timestamp
と:datetime
にデフォルト設定されますDATETIME
しばらく、:date
および:time
対応するDATE
とTIME
、それぞれ。
つまり、Rails内では、日付、時刻、またはその両方を格納する必要があるかどうかを決定するだけで済みます。
TIME
カラムは24時間を超えることができるため、厳密には「時刻」ではありません。「経過時間」としても使えます。
:datetime(8バイト)
:timestamp(4バイト)
これが私が見つけた素晴らしく正確な説明です。
TIMESTAMPは、レコードの変更を追跡し、レコードが変更されるたびに更新するために使用されます。DATETIMEは、レコードの変更の影響を受けない特定の静的な値を格納するために使用されます。
TIMESTAMPは、異なるTIME ZONE関連の設定の影響も受けます。DATETIMEは定数です。
TIMESTAMPは内部で現在のタイムゾーンをUTCに変換して格納し、取得中に現在のタイムゾーンに変換して戻します。DATETIMEはこれを行うことができません。
TIMESTAMPは4バイトで、DATETIMEは8バイトです。
TIMESTAMPでサポートされている範囲: '1970-01-01 00:00:01' UTCから '2038-01-19 03:14:07' UTC DATETIMEでサポートされている範囲: '1000-01-01 00:00:00'から '9999 -12-31 23:59:59 ′
ソース:https : //www.dbrnd.com/2015/09/difference-between-datetime-and-timestamp-in-mysql/# :~: text=DATETIME%20vs%20TIMESTAMP%3A,DATETIME%20is%20constant。
また...