Hi there, I have not dived into your code but this is what I came up with some time ago
bool isDST()
{ // (Central) European Summer Timer calculation (last Sunday in March/October)
int dayOfMonth = Time.day();
int month = Time.month();
int dayOfWeek = Time.weekday() - 1; // make Sunday 0 .. Saturday 6
if (month >= 4 && month <= 9)
{ // April to September definetly DST
return true;
}
else if (month < 3 || month > 10)
{ // before March or after October is definetly standard time
return false;
}
// March and October need deeper examination
boolean lastSundayOrAfter = (dayOfMonth - dayOfWeek > 24);
if (!lastSundayOrAfter)
{ // before switching Sunday
return (month == 10); // October DST will be true, March not
}
if (dayOfWeek)
{ // AFTER the switching Sunday
return (month == 3); // for March DST is true, for October not
}
int secSinceMidnightUTC = Time.now() % 86400;
boolean dayStartedAs = (month == 10); // DST in October, in March not
// on switching Sunday we need to consider the time
if (secSinceMidnightUTC >= 1*3600)
{ // 1:00 UTC (=1:00 GMT/2:00 BST or 2:00 CET/3:00 CEST)
return !dayStartedAs;
}
return dayStartedAs;
}