Código horario verano/invierno

Hola,

he corregido el código anterior, ahora aparte suma el día de la semana y el del mes. Además me he dado cuenta que lo que enuncié como datos del RTC DS3231SN# no estaba correcto, ya que el domingo es 1 y no 0, es decir: dayOfWeek[1=domingo,2=lunes,....,7=sábado]

A continuación muestro el código que he hecho, si veis algún error por favor comentarmelo
Como requisito al poner la hora del RTC es que ésta se ponga en horario de invierno y no de verano.
Os recuerdo que este código no reconfigura el RTC sino que modifica el dato para posteriormente imprimirlo en pantalla/datalogger,...
La idea es que funcione incluso en sistemas que no están encendidos permanentemente (lógicamente el RTC ha de tener su batería para que cuente el tiempo independiente de lo que pase con el Arduino)

void calculo_horario (void){
  
  //Todo abril y todo noviembre (más adelante se le resta para los días de
  //octubre que no son horario de verano
  if (month>=4&&month<=10){
    hour=hour++;
  }
  //Para los días de marzo desde el último domingo del mes
  if (month==3&&dayOfWeek==1&&dayOfMonth==31){
    if(hour>=2){   
    hour=hour++;
    }
  }
  if (month==3&&dayOfWeek==1&&dayOfMonth==30){
    if(hour>=2){   
    hour=hour++;
    }
  }
  if (month==3&&dayOfWeek==1&&dayOfMonth==29){
    if(hour>=2){   
    hour=hour++;
    }
  }
  if (month==3&&dayOfWeek==1&&dayOfMonth==28){
    if(hour>=2){   
    hour=hour++;
    }
  }
  if (month==3&&dayOfWeek==1&&dayOfMonth==27){
    if(hour>=2){   
    hour=hour++;
    }
  }
  if (month==3&&dayOfWeek==1&&dayOfMonth==26){
    if(hour>=2){   
    hour=hour++;
    }
  }
  if (month==3&&dayOfWeek==1&&dayOfMonth==25){
    if(hour>=2){   
    hour=hour++;
    }
  }
  if (month==3&&dayOfWeek==2&&dayOfMonth==31){
    hour=hour++;
  }
  if (month==3&&dayOfWeek==2&&dayOfMonth==30){
    hour=hour++;
  }
  if (month==3&&dayOfWeek==2&&dayOfMonth==29){
    hour=hour++;
  }
  if (month==3&&dayOfWeek==2&&dayOfMonth==28){
    hour=hour++;
  }
  if (month==3&&dayOfWeek==2&&dayOfMonth==27){
    hour=hour++;
  }
  if (month==3&&dayOfWeek==2&&dayOfMonth==26){
    hour=hour++;
  }
  if (month==3&&dayOfWeek==3&&dayOfMonth==31){
    hour=hour++;
  }
  if (month==3&&dayOfWeek==3&&dayOfMonth==30){
    hour=hour++;
  }
  if (month==3&&dayOfWeek==3&&dayOfMonth==29){
    hour=hour++;
  }
  if (month==3&&dayOfWeek==3&&dayOfMonth==28){
    hour=hour++;
  }
  if (month==3&&dayOfWeek==3&&dayOfMonth==27){
    hour=hour++;
  }
  if (month==3&&dayOfWeek==4&&dayOfMonth==31){
    hour=hour++;
  }
  if (month==3&&dayOfWeek==4&&dayOfMonth==30){
    hour=hour++;
  }
  if (month==3&&dayOfWeek==4&&dayOfMonth==29){
    hour=hour++;
  }
  if (month==3&&dayOfWeek==4&&dayOfMonth==28){
    hour=hour++;
  }
  if (month==3&&dayOfWeek==5&&dayOfMonth==31){
    hour=hour++;
  }
  if (month==3&&dayOfWeek==5&&dayOfMonth==30){
    hour=hour++;
  }
  if (month==3&&dayOfWeek==5&&dayOfMonth==29){
    hour=hour++;
  }
  if (month==3&&dayOfWeek==6&&dayOfMonth==31){
    hour=hour++;
  }  
  if (month==3&&dayOfWeek==6&&dayOfMonth==30){
    hour=hour++;
  }  
  if (month==3&&dayOfWeek==7&&dayOfMonth==31){
    hour=hour++;
  }
  
 
//Para los días de octubre que no son de horario de verano (se le resta la hora
//anteriormente sumada)
  if (month==10&&dayOfWeek==1&&dayOfMonth==31){
      if(hour>=3){
        hour=hour-1;
      }
  }
  if (month==10&&dayOfWeek==1&&dayOfMonth==30){
      if(hour>=3){
        hour=hour-1;
      }
  }
  if (month==10&&dayOfWeek==1&&dayOfMonth==29){
      if(hour>=3){
        hour=hour-1;
      }
  }
  if (month==10&&dayOfWeek==1&&dayOfMonth==28){
      if(hour>=3){
        hour=hour-1;
      }
  }
  if (month==10&&dayOfWeek==1&&dayOfMonth==27){
      if(hour>=3){
        hour=hour-1;
      }
  }
  if (month==10&&dayOfWeek==1&&dayOfMonth==26){
      if(hour>=3){
        hour=hour-1;
      }
  }
  if (month==10&&dayOfWeek==1&&dayOfMonth==25){
      if(hour>=3){
        hour=hour-1;
      }
  }
  if (month==10&&dayOfWeek==2&&dayOfMonth==31){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }
  if (month==10&&dayOfWeek==2&&dayOfMonth==30){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }
  if (month==10&&dayOfWeek==2&&dayOfMonth==29){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }
  if (month==10&&dayOfWeek==2&&dayOfMonth==28){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }
  if (month==10&&dayOfWeek==2&&dayOfMonth==27){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }
  if (month==10&&dayOfWeek==2&&dayOfMonth==26){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }
  if (month==10&&dayOfWeek==3&&dayOfMonth==31){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }
  if (month==10&&dayOfWeek==3&&dayOfMonth==30){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }
  if (month==10&&dayOfWeek==3&&dayOfMonth==29){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }
  if (month==10&&dayOfWeek==3&&dayOfMonth==28){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }
  if (month==10&&dayOfWeek==3&&dayOfMonth==27){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }
  if (month==10&&dayOfWeek==4&&dayOfMonth==31){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }
  if (month==10&&dayOfWeek==4&&dayOfMonth==30){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }
  if (month==10&&dayOfWeek==4&&dayOfMonth==29){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }
  if (month==10&&dayOfWeek==4&&dayOfMonth==28){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }
  if (month==10&&dayOfWeek==5&&dayOfMonth==31){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }
  if (month==10&&dayOfWeek==5&&dayOfMonth==30){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }
  if (month==10&&dayOfWeek==5&&dayOfMonth==29){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }
  if (month==10&&dayOfWeek==6&&dayOfMonth==31){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }  
  if (month==10&&dayOfWeek==6&&dayOfMonth==30){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }  
  if (month==10&&dayOfWeek==7&&dayOfMonth==31){
    if (hour==0){
      hour=22;
    }
    else
    {
      if (hour==1){
      hour=23;
      }
      else
      {
        hour=hour-2;
      }
    }
  }
  
  //Al incrementar la hora en verano, hay que ajustar el día de mes y mes una hora antes que el RTC
  if (hour>=24){
    hour=0;
    dayOfMonth=dayOfMonth++;
    if(dayOfMonth>=32){
      dayOfMonth=1;
      month=month++;
    }
    dayOfWeek=dayOfWeek++;
    if(dayOfWeek==8){
      dayOfWeek=1;
    }
  }
}

Un saludo