serve il listato completo... per ammattire un po

però vedo che tu non tocchi la data quindi c'è qualche errore da qualche parte
qui nel caso di aumento orario
tmpHours = tmpHours < 23 ? tmpHours + 1 : tmpHours;
se tmpHours è minore di 23 (esempio 22) incrementa di 1 (esempio 23)
se tmpHours è uguale a 23 non incrementa, resta 23
stessa cosa nel decremento
tmpHours = tmpHours > 0 ? tmpHours - 1 : tmpHours;
se tmpHours è maggiore di 0 (esempio 1) decrementa di 1 (esempio 0)
se tmpHours è uguale a 0 non decrementa, resta 0
è corretto ciò che succede?
la funzione write dell'rtc è questa
void DS3231RTC::write(tmElements_t &tm)
{
Wire.beginTransmission(DS3231_CTRL_ID);
Wire.write((uint8_t)0); // reset register pointer
Wire.write(dec2bcd(tm.Second)) ;
Wire.write(dec2bcd(tm.Minute));
Wire.write(dec2bcd(tm.Hour)); // sets 24 hour format
Wire.write(dec2bcd(tm.Wday));
Wire.write(dec2bcd(tm.Day));
Wire.write(dec2bcd(tm.Month));
Wire.write(dec2bcd(tmYearToY2k(tm.Year)));
Wire.endTransmission();
}
però tu non imposti la data, perlomeno nel pezzo che hai allegato...