Escrevi um pequeno código para identificar e corrigir automaticamente o fuso horário de acordo com o horário de verão brasileiro. No meu caso eu utilizo para sincronizar o RTC com um servidor NTP.
Segue abaixo para quem se interessar.
int timeZone() {
int previousSunday = day() - weekday();
if (month() < 2 || month() > 10) return -2;
else if (month() == 2 && previousSunday < 14) return -2;
else if (month() == 10 && previousSunday >= 14) return -2;
else return -3;
}
Bastante prático, mas está me gerando o seguinte erro:
C:\Users\Daniel\AppData\Local\Temp\arduino_modified_sketch_30943\relogio_digital_copia.ino: In function 'time_t getNtpTime()':
D:\Documents\Arduino\libraries\Time-master/TimeLib.h:68:40: error: invalid operands of types 'int()' and 'long unsigned int' to binary 'operator*'
#define SECS_PER_HOUR ((time_t)(3600UL))
^
C:\Users\Daniel\AppData\Local\Temp\arduino_modified_sketch_30943\relogio_digital_copia.ino:873:56: note: in expansion of macro 'SECS_PER_HOUR'
return secsSince1900 - 2208988800UL + timeZone * SECS_PER_HOUR;
Também uso a sincronização com o servidor NTP, e posso ter implementado errado. O que eu fiz foi remover a linha do const int timeZone no início do código para não dar confilto e colei o seu código. Fiz certo?
Sim... :o
Só que precisa declarar como uma função e colocar os parêntesis no call né. Pela mensagem de erro que você postou parece que estava sem os parêntesis...
Um usuário fez referencia a este post aqui, dizendo que é "fácil" calcular, mas eu estou com dúvida, o código leva em conta, os 'poréns' da regra?
Cito a regra:
– O início do horário de verão é no terceiro domingo de outubro, em determinados estados;
– O término ser dará no terceiro domingo de fevereiro do ano seguinte. PORÉM, CASO O MESMO COINCIDA COM O CARNAVAL, A TROCA SERÁ NO DOMINGO SEGUINTE.
o Carnaval, ...é regulado pelo calendário lunar.
Pra quem nunca se interessou em saber sobre o motivo da Semana Santa e do Carnaval ser em dias diferentes a cada ano, aí vai uma breve explicação:
O Domingo de Páscoa é sempre no primeiro domingo de lua cheia após o equinócio da primavera no hemisfério norte (21 de março). O Carnaval é o sétimo domingo antes dessa data.
Sim, eu que fiz esse código, e eu que comentei no seu outro post.
Faz algum tempo que fiz isso, e uso até hoje, nunca mais me preocupei com isso, fiz alguns testes para os próximo anos e estava batendo com as informações que achei na internet, ou seja, considerei todas essas particularidades.