Se usate uno shield con l'RTC potreste aver bisogno di reimpostare la data ed ora corrette senza dover ricaricare lo sketch. Questo codice vi permette di reimpostare questi valori inviandoli dall'IDE, qualsiasi altro programma che dialoghi via seriale con ARDUINO.
Sono settate tre (3) modalità di uscita dall'attesa dei dati via seriale:
1) con la funzione Serial.readBytesUntil('#', inData, BUFFER_SIZE) vengono imposte due condizioni di uscita  il carattere # o il riempimento del buffer;
2) con la funzione Serial.setTimeout(180000) viene impostato un tempo massimo di attesa indipendentemente dai dati ricevuti, in questo caso tre minuti.
Non viene eseguito alcun controllo sui dati ricevuti, se ne sentite la necessità implementatelo.
Il parametro passato deve avere la seguente codifica:

GG/MM/AAAA hh:mm:ss

#include <wire.h>
#include "RTClib.h"
#define BUFFER_SIZE 25 // sovradimensionato, da ricalcolare per quello che sono i caratteri passati via seriale + 1
#define DEBUG 1 // DEBUG = 0 non compila / DEBUG = 1 compila

// RTC object
RTC_DS1307 rtc;

void setup() {
  char inData[BUFFER_SIZE]; // Alloca la stringa in cui inserire i dati ricevuti
  //byte index = 0; // Indice lella lista
  int anno, mese, giorno, ora, minuto;
  unsigned char  i;
  Serial.begin(57600);
  Wire.begin();
  rtc.begin(); 

  Serial.print("!"); //arduino è pronto a ricevere la stringa
  for(i=0;i<BUFFER_SIZE;inData[i++] = '\0');
  /*
  while(Serial.available() > 0) // Cicla finchè ci sono caratteri sulla seriale
  {
    if(index < (BUFFER_SIZE - 1)) // One less than the size of the array
    {
      inData[index++] = Serial.read(); // Store it
      inData[index] = '\0'; // Null terminate the string
    }
 }
 */
  //Seconda opzione
  Serial.setTimeout(180000); //3 minuti di attesa
  /* 
   * la funzione seguente legge i dati ricevuti via seriale
   * "termina" la sua esecuzione quando vengono soddisfatte una delle tre condizioni
   * 1) riceve un carattere di controllo (in questo caso '#')
   * 2) riempie tutto il buffer dati
   * 3) supera il tempo limite di attesa prefissato con Serial.setTimeout(long)
  */
  Serial.readBytesUntil('#', inData, BUFFER_SIZE); //rimane in attesa per: carattere di controllo, tempo timeout, lunghezza testo ricevuto
  if(strlen(inData)==16){ // passato data e ora da inserire, aggiorno l'RTC

    Serial.print("Lunghezza stringa ->");
    Serial.println(strlen(inData));
    Serial.print("Ricevuto ->");  
    Serial.println(inData);
    sscanf(inData,"%i,%i,%i,%i,%i",&anno,&mese,&giorno,&ora,&minuto);
  //  #if DEBUG == 1
      Serial.print(anno);
      Serial.print(mese);
      Serial.print(giorno);
      Serial.print(ora);
      Serial.println(minuto);
      Serial.println("OK");
  //  #endif  
    DateTime set_time = DateTime(anno, mese, giorno, ora, minuto);
    rtc.adjust(set_time);
  }
  
}

void loop() {
  DateTime now = rtc.now();
  char time_string[20];
  sprintf(time_string, "%02d/%02d/%d %02d:%02d:%02d", now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second());
  Serial.println(time_string);
  delay(4000);
}