Código horario verano/invierno

Bueno, aquí tenéis el código que he creado. Sólo ajusta la hora según el Arduino se "despierte" un día de horario de verano o invierno. No he ajustado el día del mes [1..31], y el del año no se ve afectado ya que como requisito de configuración del RTC habrá que decir que hay que colocarle la hora según el horario de invierno (así me ahorro líneas de código)[Para la versión 2.0]

Si alguien ve algún error que me avise por favor:

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+1;
  }
  //Para los días de marzo desde el último domingo del mes
  if (month==3&&dayOfWeek==0&&dayOfMonth==31){
    if(hour>=2){   
    hour=hour+1;
    }
  }
  if (month==3&&dayOfWeek==0&&dayOfMonth==30){
    if(hour>=2){   
    hour=hour+1;
    }
  }
  if (month==3&&dayOfWeek==0&&dayOfMonth==29){
    if(hour>=2){   
    hour=hour+1;
    }
  }
  if (month==3&&dayOfWeek==0&&dayOfMonth==28){
    if(hour>=2){   
    hour=hour+1;
    }
  }
  if (month==3&&dayOfWeek==0&&dayOfMonth==27){
    if(hour>=2){   
    hour=hour+1;
    }
  }
  if (month==3&&dayOfWeek==0&&dayOfMonth==26){
    if(hour>=2){   
    hour=hour+1;
    }
  }
  if (month==3&&dayOfWeek==0&&dayOfMonth==25){
    if(hour>=2){   
    hour=hour+1;
    }
  }
  if (month==3&&dayOfWeek==1&&dayOfMonth==31){
    hour=hour+1;
  }
  if (month==3&&dayOfWeek==1&&dayOfMonth==30){
    hour=hour+1;
  }
  if (month==3&&dayOfWeek==1&&dayOfMonth==29){
    hour=hour+1;
  }
  if (month==3&&dayOfWeek==1&&dayOfMonth==28){
    hour=hour+1;
  }
  if (month==3&&dayOfWeek==1&&dayOfMonth==27){
    hour=hour+1;
  }
  if (month==3&&dayOfWeek==1&&dayOfMonth==26){
    hour=hour+1;
  }
  if (month==3&&dayOfWeek==2&&dayOfMonth==31){
    hour=hour+1;
  }
  if (month==3&&dayOfWeek==2&&dayOfMonth==30){
    hour=hour+1;
  }
  if (month==3&&dayOfWeek==2&&dayOfMonth==29){
    hour=hour+1;
  }
  if (month==3&&dayOfWeek==2&&dayOfMonth>=28){
    hour=hour+1;
  }
  if (month==3&&dayOfWeek==2&&dayOfMonth==27){
    hour=hour+1;
  }
  if (month==3&&dayOfWeek==3&&dayOfMonth==31){
    hour=hour+1;
  }
  if (month==3&&dayOfWeek==3&&dayOfMonth==30){
    hour=hour+1;
  }
  if (month==3&&dayOfWeek==3&&dayOfMonth==29){
    hour=hour+1;
  }
  if (month==3&&dayOfWeek==3&&dayOfMonth==28){
    hour=hour+1;
  }
  if (month==3&&dayOfWeek==4&&dayOfMonth==31){
    hour=hour+1;
  }
  if (month==3&&dayOfWeek==4&&dayOfMonth==30){
    hour=hour+1;
  }
  if (month==3&&dayOfWeek==4&&dayOfMonth==29){
    hour=hour+1;
  }
  if (month==3&&dayOfWeek==5&&dayOfMonth==31){
    hour=hour+1;
  }  
  if (month==3&&dayOfWeek==5&&dayOfMonth==30){
    hour=hour+1;
  }  
  if (month==3&&dayOfWeek==6&&dayOfMonth==31){
    hour=hour+1;
  }
  
 
//Para los días de octubre que no son de horario de verano (se le resta la hora
//anteriormente sumada)
  if (month==10&&dayOfWeek==0&&dayOfMonth==31){
      if(hour>=2){
        hour=hour-1;
      }
  }
  if (month==10&&dayOfWeek==0&&dayOfMonth==30){
      if(hour>=2){
        hour=hour-1;
      }
  }
  if (month==10&&dayOfWeek==0&&dayOfMonth==29){
      if(hour>=2){
        hour=hour-1;
      }
  }
  if (month==10&&dayOfWeek==0&&dayOfMonth==28){
      if(hour>=2){
        hour=hour-1;
      }
  }
  if (month==10&&dayOfWeek==0&&dayOfMonth==27){
      if(hour>=2){
        hour=hour-1;
      }
  }
  if (month==10&&dayOfWeek==0&&dayOfMonth==26){
      if(hour>=2){
        hour=hour-1;
      }
  }
  if (month==10&&dayOfWeek==0&&dayOfMonth==25){
      if(hour>=2){
        hour=hour-1;
      }
  }
  if (month==10&&dayOfWeek==1&&dayOfMonth==31){
    if (hour==0){
      hour==23;
    }
    else
    {
    hour=hour-1;
    }
  }
  if (month==10&&dayOfWeek==1&&dayOfMonth==30){
    if (hour==0){
      hour==23;
    }
    else
    {
    hour=hour-1;
    }
  }
  if (month==10&&dayOfWeek==1&&dayOfMonth==29){
    if (hour==0){
      hour==23;
    }
    else
    {
    hour=hour-1;
    }
  }
  if (month==10&&dayOfWeek==1&&dayOfMonth==28){
    if (hour==0){
      hour==23;
    }
    else
    {
    hour=hour-1;
    }
  }
  if (month==10&&dayOfWeek==1&&dayOfMonth==27){
    if (hour==0){
      hour==23;
    }
    else
    {
    hour=hour-1;
    }
  }
  if (month==10&&dayOfWeek==1&&dayOfMonth==26){
    if (hour==0){
      hour==23;
    }
    else
    {
    hour=hour-1;
    }
  }
  if (month==10&&dayOfWeek==2&&dayOfMonth==31){
    if (hour==0){
      hour==23;
    }
    else
    {
    hour=hour-1;
    }
  }
  if (month==10&&dayOfWeek==2&&dayOfMonth==30){
    if (hour==0){
      hour==23;
    }
    else
    {
    hour=hour-1;
    }
  }
  if (month==10&&dayOfWeek==2&&dayOfMonth==29){
    if (hour==0){
      hour==23;
    }
    else
    {
    hour=hour-1;
    }
  }
  if (month==10&&dayOfWeek==2&&dayOfMonth==28){
    if (hour==0){
      hour==23;
    }
    else
    {
    hour=hour-1;
    }
  }
  if (month==10&&dayOfWeek==2&&dayOfMonth==27){
    if (hour==0){
      hour==23;
    }
    else
    {
    hour=hour-1;
    }
  }
  if (month==10&&dayOfWeek==3&&dayOfMonth==31){
    if (hour==0){
      hour==23;
    }
    else
    {
    hour=hour-1;
    }
  }
  if (month==10&&dayOfWeek==3&&dayOfMonth==30){
    if (hour==0){
      hour==23;
    }
    else
    {
    hour=hour-1;
    }
  }
  if (month==10&&dayOfWeek==3&&dayOfMonth==29){
    if (hour==0){
      hour==23;
    }
    else
    {
    hour=hour-1;
    }
  }
  if (month==10&&dayOfWeek==3&&dayOfMonth==28){
    if (hour==0){
      hour==23;
    }
    else
    {
    hour=hour-1;
    }
  }
  if (month==10&&dayOfWeek==4&&dayOfMonth==31){
    if (hour==0){
      hour==23;
    }
    else
    {
    hour=hour-1;
    }
  }
  if (month==10&&dayOfWeek==4&&dayOfMonth==30){
    if (hour==0){
      hour==23;
    }
    else
    {
    hour=hour-1;
    }
  }
  if (month==10&&dayOfWeek==4&&dayOfMonth==29){
    if (hour==0){
      hour==23;
    }
    else
    {
    hour=hour-1;
    }
  }
  if (month==10&&dayOfWeek==5&&dayOfMonth==31){
    if (hour==0){
      hour==23;
    }
    else
    {
    hour=hour-1;
    }
  }  
  if (month==10&&dayOfWeek==5&&dayOfMonth==30){
    if (hour==0){
      hour==23;
      
    }
    else
    {
    hour=hour-1;
    }
  }  
  if (month==10&&dayOfWeek==6&&dayOfMonth==31){
    if (hour==0){
      hour==23;
    }
    else
    {
    hour=hour-1;
    }
  }
  
  if (hour>=24){
    hour=0;
  }
}

Un saludo