Boa discussao, e eu tenho pensado sobre isto recentemente.
A grande questao é que o RTC do Arduino nao tem a funçao de armazenar datas e horários. Sua funçáo é apenas manter um contador interno em milisegundos. Este contador é zerado todas as vezes que o arduino é desligado.
Isto posto, e imaginando que nao existe um RTC externo (como um DS1307, 1337 ou 1672), quando o arduino precisar de data/hora, ele tem algumas opçoes:
- usando uma placa de rede (Ethernet Shield ou Wi-fi), ele usar o protocolo NTP para pegar data/hora
- em algum momento o PC passa o horário para ele, e aquele horário e guardado, bem como o relógio interno do Arduino. Daí, quando se precisar de data/hora, faz-se a matemática do horario inicial + contador instantaneo - contador do momento em que o horário inicial foi lido. Isto é pouco prático e impreciso, mas funciona quando nao se tem rede ou um RTC externo.
Já com o RTC externo, ajusta-se este apenas 1 vez e daí em diante - se sua energia nao for removida - apenas lê-se data/hora quando for preciso.
Eu acho que é muito melhor ter um RTC externo, mesmo quando se tem uma EthernetShield, e estou desenvolvendo um pequeno shield para mim que abriga 1 DS1337 + 4 24LC256 (para um total de 1 Mbit de EEPROM).