Hallo,
hab das mal versucht mit Excel nachzustellen und dann händisch zu rechnen, weil der µC Ganzzahlen abschneidet.
Folgende µC Formel
__ErsterTagSzMaerz= 31 - (5 * year /4 + 4) % 7; __
wäre in Excel
=31-REST(5*year/4+4;7)
dabei lande ich mit year=2014 bei
=31-REST(5*2014/4+4;7)
=31-2521,5 modulo 7
Jetzt wird im µC abgeschnitten, weil wir mit Ganzzahlen arbeiten, dann müßte es aus Sicht des µC lauten
=31-2521 module 7 ergibt einen Rest von 1 (360*7=2520)
=31-1
= 30 Das wäre dann der 30.03.2014, paßt.
Wenn ich mit 14 statt 2014 als year rechne, wäre das wie folgt
=31-REST(5*14/4+4;7)
=31-21,5 modulo 7
=31-21 module 7 ergibt einen Rest von 0
= 31 - 0
= 31 Das wäre dann fälschlicherweise der 31. statt der 30.
Die Formel vom "alten" Code lautet (2 + 24*(31 - (5 * Jahr /4 + 4) % 7))
= 2 + 24*(31 - (5 * 2014 /4 + 4) % 7)
= 2 + 24 * 2521 % 7
= 2 + 24 * (31-1)
= 722
mit Jahr 14 statt 2014
= 2 + 24*(31 - (5 * 14 /4 + 4) % 7)
= 2 + 24 * 21 % 7
= 2 + 24 * (31-0)
= 746 kommt auch was anderes raus
Der Vergleich im Code wäre ausgerechnet für den Fall am 30.März 2014 auch 722 >= ...
Da muß ich einen Test mit den Sketchen und Uhr stellen vergessen haben. Entschuldigung für die Aufregung.
Erkenntnis daraus. Man muß in beiden Sommerzeit_aktiv Funktionen Jahreszahlen 4stellig verwenden bzw. der Funktion übergeben.
Nicht das ich daraufhin falsch verstanden wurden bin. Ich wollte nicht die tolle Funktion in Frage stellen, sondern nur wissen warum beide Funktionen, fälschlicherweise angenommen, verschieden rechnen. Das hat sich damit geklärt.
Jetzt könnte ich natürlich noch in die Funktion eine Abfrage einbauen ob die Jahreszahl 2 oder 4stellig ist. Das macht aber keinen Sinn, weil dann wieder unnötige Rechenzeit verloren geht, die einfach auch sinnlos ist. Ich verwende jetzt 4stellige Jahreszahlen und gut ist.
Danke jurs nochmal für die tollen Funktionen rund um die Uhrzeit. ![]()