Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > > > Moin, > > > > > > > > da ich auf die Schnelle hier nichts gefunden habe, > > > > habe ich mir die Berechnung des Wochtages fix selber gebastelt. > > > > > > > > Ist eine vereinfachte Formel der Gausschen Wochentagsberechnung. > > > > Funktioniert von 2001 bis 2099 (Hunde wollt ihr ewig leben? ;-) ) > > > > Funktioniert wegen der FLOOR Funktion nur auf dem 128er. > > > > > > > > In der Funktion wird das aktuelle Datum eingelesen und als Rückgabe > > > > gibt es INT-Zahlen von 0 bis 6 (Sonntag bis Samstag) > > > > > > > > Ciao, Francesco > > > > > > > > ------------------------------------------------------------------------------------- > > > > > > > > int get_weekday (void) > > > > // berechnung Wochentag mit vereinfachter Gausscher Wochentagberechnung > > > > // Formel funktionert von 2001 bis 2099 (sollte eigentlich reichen) > > > > // weitere Infos bei wikipedia: > > > > // http://de.wikipedia.org/wiki/Gaußsche_Wochentagsformel > > > > { > > > > byte tag; byte mon; byte jah; int wot ; //Variablen > > > > int zr1 ; int zr2 ; int zr3 ; > > > > > > > > tag= Clock_GetVal(3)+1 ; > > > > mon= Clock_GetVal(4)+1 ; > > > > jah= Clock_GetVal(5) ; > > > > > > > > switch (mon) > > > > { > > > > // in zr1 ist die zwischenrechnung (2.6 x Monat - 0,2 abgerundet) > > > > // für Jan und Feb wird gemäß Gauß ein Jahr abgezogen > > > > case 1: zr1 = 28 ; jah-- ; > > > > break ; > > > > case 2: zr1 = 31 ; jah-- ; > > > > break ; > > > > case 3: zr1 = 2 ; > > > > break ; > > > > case 4: zr1 = 5 ; > > > > break ; > > > > case 5: zr1 = 7 ; > > > > break ; > > > > case 6: zr1 = 10 ; > > > > break ; > > > > case 7: zr1 = 12 ; > > > > break ; > > > > case 8: zr1 = 15 ; > > > > break ; > > > > case 9: zr1 = 18 ; > > > > break ; > > > > case 10: zr1 = 20 ; > > > > break ; > > > > case 11: zr1 = 23 ; > > > > break ; > > > > case 12: zr1 = 25 ; > > > > break ; > > > > } > > > > > > > > zr3 = floor (jah/4); //Zwischenrechnung > > > > zr2 = tag + zr1 +jah + zr3 ; //vereinfachte Gaussche Formel > > > > wot = zr2% 7 ; //Modulo auf 7 > > > > return wot ; //Rückgabe Wochentag 0 bis 6 (Sonntag = 0) > > > > } > > > > > > > > > > > > > etwas Aufwendiger aber simple Berechnung. > > > > > > Tag und Monat nicht o-Basierend da ich diese werte von der RTC bekomme > > > > > > > > > <basic>Sub Dowberechnung() > > > Dim Tageszahl As ULong '1 31 > > > Dim Jahreshundert As ULong '2 28 31 > > > Dim Schalttag As Byte '3 31 59 > > > Dim Jahrzahl As ULong '4 30 90 > > > '5 31 120 > > > If RTC_Jahr() Mod 4 = 0 Then '6 30 151 > > > Schalttag = 1 '7 31 181 > > > Else '8 31 212 > > > Schalttag = 0 '9 30 243 > > > End If '10 31 273 > > > '11 30 304 > > > '12 31 334 > > > Select Case RTC_Mon() > > > Case 1 : Tageszahl = RTC_Tag() 'Jan > > > Case 2 : Tageszahl = RTC_Tag() + 31 'Feb > > > Case 3 : Tageszahl = RTC_Tag() + Schalttag + 59 > > > Case 4 : Tageszahl = RTC_Tag() + Schalttag + 90 > > > Case 5 : Tageszahl = RTC_Tag() + Schalttag + 120 > > > Case 6 : Tageszahl = RTC_Tag() + Schalttag + 151 > > > Case 7 : Tageszahl = RTC_Tag() + Schalttag + 181 > > > Case 8 : Tageszahl = RTC_Tag() + Schalttag + 212 > > > Case 9 : Tageszahl = RTC_Tag() + Schalttag + 243 > > > Case 10 : Tageszahl = RTC_Tag() + Schalttag + 273 > > > Case 11 : Tageszahl = RTC_Tag() + Schalttag + 304 > > > Case 12 : Tageszahl = RTC_Tag() + Schalttag + 334 > > > End Select > > > TagJahr = Tageszahl 'angabe als Word für Berechnungen > > > Jahrzahl = RTC_Jahr() 'vorher in ULong wandeln notwendig > > > Jahreshundert = 36525 * Jahrzahl - 25u 'Schalttag 1/4 dazu > > > dow = (Jahreshundert / 100 + Tageszahl - 1) Mod 7 'Korr Tageszahl da1.1.00 Sa > > > > > > > > > > > > ' Clock Berichtigungen: Wenn Tag 0 Then 1; wenn Tag > 28+Schalttag dann 1.3. > > > > > > End Sub > > > </basic> > > > > > > mfG > > > Ernst H. > > > > > > > > > > > sollte eigentlich zumindest bis zum Jahr 2255 funktionieren - also meinen 300. Geburtstag richtig > > berechnen. (ich trage mir schon mal den Termin ein) > > > > Ernst H. > > Hallo Ernst, > > benutz doch vorinitialisierte Arrays, dann brauchst Du nicht solch ein Case Monster: > > Z.B: Tageszahl = RTC_Tag() + Schalttag + Tag_array(RTC_Mon()) > > Klar, für die Fälle 1 und 2 muß man noch ein If bauen um den fehlenden > Schalttag zu berücksichtigen. > > Gruss Peter >