RTC mit Sommerzeit

guntherb:
Das mit der Sommerzeit ist recht aufwändig zu berechnen, aber es gibt eine Lib "DS1307new.h", die das unterstützt.

Ich mache die Feststellung der Sommerzeit mit gerade mal sechs Zeilen Code im Codeblock, davon eine längere if-Abfrage.

boolean summertime_EU(int year, byte month, byte day, byte hour, byte tzHours)
// European Daylight Savings Time calculation by "jurs" for German Arduino Forum
// input parameters: "normal time" for year, month, day, hour and tzHours (0=UTC, 1=MEZ)
// return value: returns true during Daylight Saving Time, false otherwise
{ 
  if (month<3 || month>10) return false; // keine Sommerzeit in Jan, Feb, Nov, Dez
  if (month>3 && month<10) return true; // Sommerzeit in Apr, Mai, Jun, Jul, Aug, Sep
  if (month==3 && (hour + 24 * day)>=(1 + tzHours + 24*(31 - (5 * year /4 + 4) % 7)) || month==10 && (hour + 24 * day)<(1 + tzHours + 24*(31 - (5 * year /4 + 1) % 7))) 
    return true; 
  else 
    return false;
}

Zu übergeben an die Funktion ist eine "Zonenzeit", also die Zeit auf der man die Echtzeituhr am besten dauernd laufen läßt:

  • Jahr
  • Monat
  • Tag
  • Stunde
  • Zeitzone (UTC=0, MEZ=1)
    und Rückgabewert ist true oder false, je nachdem ob man für Sommerzeit eine Stunde draufschlagen muss oder nicht.

Im Fall der Time-Library, die mit Unix-Time "Sekunden seit 01.01.1970" arbeitet, würde man also bei Sommerzeit 3600 Sekunden auf die Zonenzeit UTC+1 draufschlagen.