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.
MarkT:
Many current Arduino boards do not keep accurate time as they use ceramic
resonators, which are accurate typically to +/-0.3% (several minutes a day).
A quartz crystal can be substituted on some of the boards if you have the
soldering skills, giving more like +/-50ppm (a few seconds a day accuracy).
so how do you know if your Arduino has a ceramic or crystal resonator? Cheching the schematic for the uno, the resonator is just described as "XTAL". Can you tell by the physical appearance, eg does a metal can mean a crystal?
hannibal01:
I know how to display real time but don't know how to measure it.
You mean compare two times and work out the difference? You must convert each time into a number of seconds after a fixed point in time, for example midnight last night, or midnight on 1st Jan. Then you can subtract one result from the other, and finally convert that number of seconds into hh:mm:ss again.
Do you need to measure to tenths or hundredths of a second? An RTC will not do that.
A single, a double, a triple, and a home run, all in one game. I though everybody knew that. Though, what the hell vector0 is talking about is anybody's guess. That response was about as far off target as his/her other posts.