Разница между разными форматами даты / времени в 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 вам нужно только решить, нужно ли вам хранить дату, время или и то и другое.