The simplest explanation is exactly as you suggested: hōc "this" + diē "day", in the ablative of time-when. This is what my old Latin textbook said, as well as Lewis and Short's dictionary:
hŏdĭē, adv. contr. from hoc die, on this day
Very similar derivations have happened in other languages:
- English "today" < Old English tō "at" + "day"
- German heute "today" < Old High German *hiu tagu "this day" (cf Tag)
- Dutch vandaag "today" < van "of" + daag "day"
- Attic Greek τήμερον "today" < *kyā- "this" (possibly the root of Latin cis) + ἡμέρα "day"
And Latin has similar words:
- prīdiē "on the day before" < Old Latin pri "before" (root of prior) + diē
- postrīdiē "on the day after" < posterō + diē
In comments on the other answer, brianpck provided some additional evidence. A fragment of Varro (number 11 here) mentions:
...et cum hodie dicimus, nihil aliud quam hoc die intelligitur.
...and when we say "today", no other meaning except "on this day" is understood.
For a more modern and scholarly source, who probably did significantly more research than Varro, this article argues for the same etymology.