The difference between different date/time formats in ActiveRecord have little to do with Rails and everything to do with whatever database you're using.
Using MySQL as an example (if for no other reason because it's most popular), you have
TIMESTAMP column data types; just as you have
So, main differences:
DATE only stores a date,
TIME only stores a time of day, while
DATETIME stores both.
The difference between
TIMESTAMP is a bit more subtle:
DATETIME is formatted as
YYYY-MM-DD HH:MM:SS. Valid ranges go from the year 1000 to the year 9999 and everything in between. While
TIMESTAMP looks similar when you fetch it from the database, it's really a just a front for a unix timestamp. Its valid range goes from 1970 to 2038. The difference here, aside from the various built-in functions within the database engine, is storage space. Because
DATETIMEstores every digit in the year, month day, hour, minute and second, it uses up a total of 8 bytes. As
TIMESTAMP only stores the number of seconds since 1970-01-01, it uses 4 bytes.
You can read more about the differences between time formats in MySQL here.
In the end, it comes down to what you need your date/time column to do. Do you need to store dates and times before 1970 or after 2038? Use
DATETIME. Do you need to worry about database size and you're within that timerange? Use
TIMESTAMP. Do you only need to store a date? Use
DATE. Do you only need to store a time? Use
Having said all of this, Rails actually makes some of these decisions for you. Both
:datetime will default to
:time corresponds to