How to print millis in [hh:mm:ss] format?

millis() returns the number of milliseconds that have passed since the Arduino was powered up or reset. It is not in any sense a clock. You could turn what millis() returns into hh:mm:ss format by dividing by the appropriate factors but it would still only be the time that has passed since the Arduino was powered up or reset, not the real time. If you were desperate you could even add a fudge factor to the millis() value to display the time now but even then millis() is not accurate over a period.

All in all an RTC is the way to go if you need the real time.