I think it is easier to use a simple function:
called like this at the start of loop()
:
void loop(void) {
Time.zone(IsDST(Time.day(), Time.month(), Time.weekday()) ? summerOffset : winterOffset);
// etc...
for europe:
bool IsDst(int day, int month, int dayOfWeek)
{
if (month < 3 || month > 10)
{
return false;
}
if (month > 3 && month < 10)
{
return true;
}
int previousSunday = day - dayOfWeek;
if (month == 3)
{
return previousSunday >= 25;
}
if (month == 10) return previousSunday < 25;
{
return false;
}
}