
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
Hallo miteinander Soweit ich das erkennen kann, arbeitet der Algorithmus in der Tat nur teilweise korrekt. Die mitteleuropĂ€ische Sommerzeit beginnt jeweils am letzten Sonntag im MĂ€rz um 2 Uhr mitteleuropĂ€ischer Zeit (MEZ). Deshalb werden mittels IF ((MONTH = 3) AND ((DAY-DOW)<25)) THEN RETURN alle Tage im Monat MĂ€rz ausgefiltert, die noch Normalzeit haben. Um zu prĂŒfen, ob der Algorithmus bis hierhin korrekt arbeitet, reicht es, die letzten zwei Wochen im MĂ€rz zu betrachten. Der letzte Sonntag im MĂ€rz kann auf den 25. bis 31. Tag fallen. Im Folgenden sind alle Tage mit Sommerzeit durch eckige Klammern "[]" eingeschlossen. Alle Tage auĂerhalb dieser Klammern haben Normalzeit und deshalb sollte die Subroutine an diesen Tagen mit dem RETURN im einzeiligen IF beendet werden. Betrachtung der letzten Tage im Monat MĂ€rz: Mo Di Mi Do Fr Sa So Mo Di Mi Do Fr Sa So 24 25 26 27 28 29[30 31] 23 24 25 26 27 28[29 30 31] 22 23 24 25 26 27[28 29 30 31] 21 22 23 24 25 26[27 28 29 30 31] 20 21 22 23 24 25[26 27 28 29 30 31] 19 20 21 22 23 24[25 26 27 28 29 30 31] 18 19 20 21 22 23 24 25 26 27 28 29 30[31] 1 2 3 4 5 6 0 1 2 3 4 5 6 0 DOW nach MOD 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 DOW im DCF77-Signal Die nĂ€chste Umstellung auf Sommerzeit findet am Sonntag, dem 26. MĂ€rz 2006, um 2 Uhr MEZ statt: Die Uhren werden eine Stunde vorgestellt auf 3 Uhr MESZ. DOW sollte an diesem Tag 0 sein und DAY gleich 26. (DAY-DOW) ist gleich 26 und (DAY-DOW)<25 ist korrekterweise nicht erfĂŒllt. Das gleiche Ergebnis erhĂ€lt man an allen folgenden Tagen bis zum Freitag, dem 31. MĂ€rz. Am Samstag zuvor, dem 25. MĂ€rz ist (DAY-DOW) = (25-6) gleich 19, weshalb die Subroutine korrekt mit dem RETURN beendet wird. Das gleiche Ergebnis an den Tagen zuvor. Problematisch könnten höchstens die ersten Tage im MĂ€rz sein: Am Samstag, dem 4. MĂ€rz, ist (DAY-DOW) = (4-6) gleich -2, also negativ. Alle Micro-Versionen können aber nur mit positiven 8-Bit-Zahlen operieren. Deshalb ergibt sich hier der Wert 254. Um anschlieĂend nur den Sonntag zu betrachten, wird mittels IF ((MONTH = 3) AND ((DAY-DOW)=25) AND (HOUR<3)) THEN RETURN auf (DAY-DOW)=25 abgefragt. Das ist offensichtlich nicht richtig, denn um ein korrektes Ergebnis am 26. MĂ€rz 2006 zu erhalten, mĂŒĂte die DOW-Variable an diesem Sonntag den Wert 1 und nicht 0 haben. Ansonsten sollte man niemals direkt mit den Zeitvariablen arbeiten, sondern sie in eigenen Variablen zwischenspeichern. Denn die Zeitvariablen können sich wĂ€hrend der Abfrage verĂ€ndern, da die Uhr weiterlĂ€uft. Viele GrĂŒĂe Dietmar Meine Homepage: http://ccintern.dharlos.de |
| Antwort schreiben |