Before SQL Server 2008, if you needed to store a date you used DATETIME, whether or not you cared about the time. If you needed only a time of day, you still used DATETIME and ignored the date half. It worked, but it wasted space and it made intent unclear.
SQL Server 2008 added types that say what they mean, and they are still the right choice today:
DATEstores a date with no time component, in 3 bytes instead of the 8 thatDATETIMEtakes.TIMEstores a time of day with no date, with configurable precision.DATETIME2is the replacement forDATETIME: a wider date range, better precision, and configurable storage.DATETIMEOFFSETstores a datetime along with a time zone offset, which matters more than it used to now that so much runs across regions.
The practical advice is simple. For new work, use DATE when you only need a date, TIME when you only need a time, and DATETIME2 rather than DATETIME everywhere else. Microsoft has recommended DATETIME2 over DATETIME for new development for a long time now.
The one thing to watch when moving an existing column from DATETIME to DATETIME2 is rounding. DATETIME rounds to increments of .000, .003, or .007 seconds, and DATETIME2 does not, so values that were being quietly rounded before will stop being rounded after. That is usually what you want, but it can surprise a comparison or a test that was written against the old behavior.