Cambio de Hora

Bueno, hola una vez mas compañeros. Desarrollando mi proyecto, en el cual cojo hora y fecha de un gps, me dispongo a realizar los cambios de horario, he configurado para que me sume 2 en verano y 1 en invierno, ya que coge la hora GMT o UMT no recuerdo cual era… pero no se si esta bien al poner tantas condiciones en el IF.
El problema es que yo quiero forzar el cambio de horario para probar a ver si me funciona de forma correcta, pero no lo logro. Lo mas cerca que he estado es cuando por la pantalla oled me imprime la hora, (Por ejemplo me encuentro forzando el cambio de Verano a Invierno) 12 y luego al forzarlo me sale 12 y en el lugar del 2 un 1 tambien, entonces supongo que es por que ambas secuencias de los If se cumplen… no se si me explico bien. Gracias por vuestra atencion

/*GPS*/
#include <TinyGPS++.h>
TinyGPSPlus gps;

/*Pantalla OLED*/
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);

#define timePrint 200

void horaFecha();
void cambioHorario();

long tiempoContadorImpresion = 0;
int dhv = 0, dhi= 0, anno= 0;

void setup()
{
 Serial.begin(115200);
  Serial1.begin(9600);
}

void loop()
{
    while (Serial1.available() > 0)
    if (gps.encode(Serial1.read()))    

Serial.print(F("  Date/Time: "));  
    Serial.print(gps.date.month());
    Serial.print(F("/"));
    Serial.print(gps.date.day());
    Serial.print(F("/"));
    Serial.print(gps.date.year());
    Serial.print(F(" "));  
    if (gps.time.hour() < 10) Serial.print(F("0"));
    Serial.print(gps.time.hour());
    Serial.print(F(":"));
    if (gps.time.minute() < 10) Serial.print(F("0"));
    Serial.print(gps.time.minute());
    Serial.print(F(":"));
    if (gps.time.second() < 10) Serial.print(F("0"));
    Serial.print(gps.time.second());
    Serial.print(F("."));
    if (gps.time.centisecond() < 10) Serial.print(F("0"));
    Serial.print(gps.time.centisecond());
    Serial.print(F(" "));
    Serial.print("Satelites: ");  
    Serial.println (gps.satellites.value ());
   

    if (gps.date.isValid() && gps.time.isValid())
    {   
       
    u8g.firstPage(); 
      do 
      { 
        u8g.setFont(u8g_font_courB10);
        u8g.setPrintPos( 12, 18);
        if (gps.date.day() < 10) u8g.print(F("0"));
        u8g.print(gps.date.day());
        u8g.setPrintPos( 35, 18);
        u8g.print("/");
        u8g.setPrintPos( 50, 18);
        if ((gps.date.month() + 5) < 10) u8g.print(F("0"));
        u8g.print((gps.date.month() + 5));
        u8g.setPrintPos( 70, 18);
        u8g.print("/");
        u8g.setPrintPos( 80, 18);
        u8g.print(gps.date.year());

        if(gps.date.day() >= dhv && gps.date.day() <= 31 && (gps.date.month() + 5) >= 3 && (gps.date.month() + 5) <= 10 && gps.time.hour() >=  2 && gps.time.minute() >= 0)
        {          
          u8g.setFont(u8g_font_osr18);
          u8g.setPrintPos( 10, 64);
          if ((gps.time.hour() +2) < 10) u8g.print(F("0"));
          u8g.print(gps.time.hour() + 2);
          u8g.setPrintPos( 40, 64);
          u8g.print(":");
          u8g.setPrintPos( 50, 64);
        }
        
        if(gps.date.day() >= dhi && gps.date.day() <= 31 && (gps.date.month() + 5) >= 10 && (gps.date.month() + 5) <= 3 && gps.time.hour() >= 3 && gps.time.minute() >= 0)
        {
          u8g.setFont(u8g_font_osr18);
          u8g.setPrintPos( 10, 64);
          if ((gps.time.hour() +1) < 10) u8g.print(F("0"));
          u8g.print(gps.time.hour() + 1);
          u8g.setPrintPos( 40, 64);
          u8g.print(":");
        }
        
        u8g.setPrintPos( 50, 64);
        if (gps.time.minute() < 10) u8g.print(F("0"));
        u8g.print(gps.time.minute());
        u8g.setPrintPos(80,64);
        u8g.print(":");
        u8g.setPrintPos(90, 64);
        if (gps.time.second() < 10) u8g.print(F("0"));
        u8g.print(gps.time.second());
      } while( u8g.nextPage() );
      tiempoImp();
  }
  else
  {
    u8g.firstPage(); 
      do 
      { 
      u8g.setFont(u8g_font_osr18);
      u8g.setPrintPos(8, 32);
      u8g.print("Cargando!");
      } while( u8g.nextPage() );
  }
}

int tiempoImp()
{
  if (millis() > tiempoContadorImpresion + timePrint)
 {
 tiempoContadorImpresion = millis();
 return 1;
 }
 return 0;
}

void cambioHorario()
{
    anno = gps.date.year();
    //Serial.println(anno);
    //el último domingo de Marzo
    dhv = 31 - Zeller(anno, 3, 31);
   
    //el último domingo de Octubre
    dhi = 31 - Zeller(anno,10,31);   
}

int Zeller(int anno, int mes, int dia)
{
    if (mes <= 2)
    {
      mes = mes + 10;
      anno = anno - 1;
    }
    else
    {
      mes = mes - 2;
    }
 
    int a = anno % 100;
    int b = anno / 100;
 
    int resultado =(700 +((26 * mes - 2) / 10) + dia + a + a/4 + b/4 - 2*b) % 7;
    return resultado;
}