millis() works fine for me. You just need to do a little creative number shifting. (Note the synchronization code... that's the most important part here.)
Code:int millisoff;
void setup () {
size(128, 128, P3D);
ellipseMode(CENTER);
// this little bit lets us synchronize the milliseconds to the current second
// this way, (millis() - millisoff) % 1000 will always be 0 on a new second
int s = second();
while(s == second());
millisoff = millis();
}
void draw () {
// get hour, minute, second distances around the clock
// second is found by adding the current millisecond % 1000 / 1000 to it, so we get a smooth transition.
// hour and minute each take from the previous one so that they move smoothly as well.
float s = (second() + ((millis()- millisoff) % 1000) / 1000.0) / 60.0, m = (minute() + s) / 60.0, h = (hour() + m) / 12.0;
background(255);
translate(64, 64); rotate(-HALF_PI);
stroke(0);
ellipse(0, 0, 112, 112);
line(0, 0, cos(h * TWO_PI) * 32, sin(h * TWO_PI) * 32);
line(0, 0, cos(m * TWO_PI) * 48, sin(m * TWO_PI) * 48);
stroke(255, 0, 0);
line(0, 0, cos(s * TWO_PI) * 48, sin(s * TWO_PI) * 48);
}
Good luck!