проблема такая же. Что произойдет если в момент вывода hour() до следующего часа останется меньше 1 мс? Выведется предыдущий час, а к моменту вывода минут и секунд счётчик уже тикнет на следующий и обнулит минуты и секунды. Вероятность небольшая, но есть. Потому лучше перед выводом завести...