Estoy trabajando en un proyecto que incluye un reloj digital que mantiene la hora local y UTC. Utilizo un Arduino NANO y un RTC DS3132, de los que incluyen memoria y uina batería recargable. La librería que utilizo el RTClib. He probado diferentes librerías que por una u otra razón consigo hacerme con ellas.
Uno de los objetivos que me he propuesto es que el RTC, sin conexión a ethernet o GSP pueda realizar el cambio horario de forma automática con las funciones disponibles en la librería.
El primer paso ha sido detectar si el horario es el de verano que, en España peninsular, va desde las dos horas del último domingo del mes de marzo hasta las dos horas del último domingo del mes de octubre. Principalmente para descontar del tiempo local una hora en el de invierno o dos horas en el de verano para calcular el tiempo UTC desde el horario local o a la inversa si el RTC se programa para que cuente el tiempo desde el UTC que es constante.
He diseñado la función cuyo código acompaño que he probado y parece que funciona, pero como soy nuevo en este lenguaje agradecería cualquier comentario crítico sobre una forma más eficiente de desarrollo.
bool isTimeSummer (DateTime dt) {
bool its = LOW;
int dom = dt.day();
int dow = dt.dayOfTheWeek();
if (dt.month() == 3) {
if (dom > 25) {
if (dow == 0) {
if (dt.hour() > 2) {
its = HIGH;
}
} else {
if (25-dom + dow <= 0) {
its = HIGH;
}
}
}
} else if (dt.month() == 10) {
if (dom <= 24) {
its = HIGH;
} else {
if (dow == 0) {
if (dt.hour() < 2) {
its = HIGH;
}
} else {
if (25 - dom + dow > 0) {
its = HIGH;
}
}
}
} else if (dt.month() > 3 && dt.month() < 10) {
its = HIGH;
}
return its;
}