Diskussion:Zellers Kongruenz

aus Wikipedia, der freien Enzyklopädie
Letzter Kommentar: vor 10 Jahren von 188.156.108.243 in Abschnitt Wochentag berechnen "Webers Formeln"
Zur Navigation springen Zur Suche springen

Beispiel in der Programmiersprache C[Quelltext bearbeiten]

Habe um dieses Beispiel ergänzt, weil ich selbst lange nach einer Implementierung in C gesucht habe. Ich möchte diese Funktion auch anderen interessierten Personen zur Verfügung stellen.

int dayofweek(int d, int m, int y)

{

 // gibt Wochentag zurück                             
 // 1  = Sonntag, 2 = Montag, ... , 7 = Samstag       
 // 0  = Datum ungültig z.B. 29.2.2007, 32.12.2007    
 // auch julianischer Kalender wird berücksichtigt
 int s,mtag[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; 
 if (y<1 || y>10000) return(0);
 if (m<1 || m>12) return(0);
 // verbotener Bereich 5.10. - 14.10.1582
 if (y==1582 && m==10 && d>4 && d<15) return(0);
 if (y>1582 || (y==1582 && m>10) || (y==1582 && m==10 && d>14))
 { // gregorianisch ab 15.10.1582
   if ((y % 4==0 && y % 100!=0) || y % 400==0) mtag[2]=29;
   if (d<1 || d>mtag[m]) return(0); 
   if (m < 3) { m += 13; y--; } else  m++; 
   s = d + 26*m/10 + y + y/4 - y/100 + y/400 + 6; 
 }
 else  // julianisch
 {  
   if (y % 4==0) mtag[2]=29; 
   if (d<1 || d>mtag[m]) return(0); 
   if (m < 3) { m += 13; y--; } else  m++; 
   s = d + 26*m/10 + y + y/4 + 4; 
 }
 return(s % 7 + 1);

}

und es geht sogar noch kürzer:

int dayofweek(int d, int m, int y)

{

 int s = m % 2; if (m==2) s-=2; if (m>7) s=1-s;
 if (m==2 && !(y % 4)) {s++; if (y>1582 && !(y % 100) && y % 400) s--;}
 if (y<1 || y>10000 || m<1 || m>12 || d<1 || d>s+30 ||
    (y==1582 && m==10 && d>4 && d<15)) return(0);
 if (m++ < 3) {m += 12; y--;}
 s = d + 26*m/10 + y + y/4 + 4;  // julianisch
 if (y>1582 || (y==1582 && m>11) || (y==1582 && m==11 && d>14))
    s += y/400 - y/100 + 2;      // gregorianisch ab 15.10.1582
 return(s % 7 + 1);

}

-- Fraba 18:00, 13. Dez. 2010 (CET)Beantworten



"Jahrhundert" wird hier als "20" angegeben, obwohl 2004 im 21. Jahrhundert liegt!?

Mir scheint die Formel ist falsch, offensichtlich wurden vom Autor hier die Nummern vertauscht. (9. November wird zu Tag 11, 9. Monat? Eher umgekehrt). Im Text habe ich es geändert, aber im Bild nicht. -- Sr 19:03, 25. Jan 2005 (CET)

So wie es jetzt ist, ist alles OK. Ich hatte nur im Text für den Tag den falschen Wert hingeschrieben. Ansonsten sind Formel und Beispiel vollkommen korrekt. Sie auch Beispiel in der Wochentagsberechnung. Evtl. kann ich auch noch ein Beispiel angeben um die Berechnung zu verdeutlichen? LJ --62.158.130.55 23:02, 27. Jan 2005 (CET)

Bitte es funktioniert doch; dieser Artikel ist auch darauf aufgebaut:

http://members.aon.at/fraba/wochtag.htm

ganz unten kann man das ganze als Demo-Programm herunterladen.


es war nicht falsch, für 2004 gehört da 20 hin. text gründlicher lesen! " J die Jahrhundertzahl (das sind die ersten beiden Stellen der vierstelligen Jahreszahl)" die ersten beiden stellen von 2004 sind 20 --Funkwelle 15:11, 3. Jun. 2009 (CEST)Beantworten

Korrekturen?[Quelltext bearbeiten]

Bei mir funktioniert die angegebene Formel nicht bei allen Daten... Ich habe zwei Dinge zur Korrektur eingeführt: Für den Januar, Februar und März muss das Jahr um eins verringert werden (1.1.2005 ist z.B. ein Samstag und nicht (wie nach der Formel hier) ein Sonntag) und wenn das Ergebnis kleiner als Null ist, muss man Sieben zum Ergebnis addieren (1.3.2005 ist nicht -5 sondern ein Dienstag).

Stimmt das? Oder mache ich sonst irgendwas falsch?


Bitte beachte den Kommentar zur Monatszahl M: "Zur einfacheren Berechnung des Wochentags beginnt das Jahr mit dem März, d.h. für den März ist M = 1, für April ist M = 2, ..., für Dezember ist M = 10. Januar und Februar sind der 11. bzw. 12. Monat des Vorjahres. Das Jahr J ist dann auch um Eins zu reduzieren"

Für den 1.1.2005 ist also M=11, T=1, J=4 und JH=20 in die Formel einzusetzen:

Für den 1.3.2005 ist M=1, T=1, J=5 und JH=20 in die Formel einzusetzen:

--Eljots 23:45, 1. Mär 2005 (CET)

Anpassung an die Originalveröffentlichung[Quelltext bearbeiten]

Ich habe den Artikel nochmals überarbeitet, so dass er dem von Zeller (1886) veröffentlichten näher kommt. --Eljots 23:27, 13. Mär 2005 (CET)

Änderung der def. von Jahrhundert[Quelltext bearbeiten]

Hallo, ich habe mal das Jahrhundert korrigiert( im Jahr 10000 ist es das 100te Jh nicht das 10te)

Verwendung in Programmiersprachen[Quelltext bearbeiten]

My apologies : I can just about read German, but I cannot write it.

That is a bad algorithm, because it ALWAYS calculates s, but s is needed only if m==2 and d==29.

Google Translate :

Meine Entschuldigung: Ich kann nur über die Deutsch lesen, aber ich kann nicht schreiben.

Das ist ein schlechter Algorithmus, da es IMMER berechnet s, aber s ist nur erforderlich, wenn m==2 und d==29.

82.163.24.100 14:10, 8. Apr. 2008 (CEST)Beantworten

Letztes Bild[Quelltext bearbeiten]

Das Bild trägt die Unterschrift "gültig ab 01". Da im Bild selbst die "Jahrhunderte" ab 1 numeriert sind, nehme ich an, dass tatsächlich die Zeit seit Christi Geburt abgedeckt sein soll. Wenn dem wirklich so ist, lautet mein Vorschlag, die Bildunterschrift auf "0001" statt "01" zu ändern, da man bei 01 genauso an 1901 oder 2001 denken könnte, das ist arg mehrdeutig. --PeterFrankfurt 01:27, 7. Mär. 2010 (CET)Beantworten

Hi Peter, der Verfasser der Datei/ des Bildes hat sich an bisherige Veröffentlichungen angelehnt, was die Nennung der Jahreszahl anbelangt. Die Bemerkung bezieht sich lediglich auf die Korrektur durch Augustus wirksam bis zum Jahr 08 (oder 0008 ?). Ansonsten schafft doch die Zuordnung der Jahre zu den Jahrhunderten die erforderliche Eindeutigkeit. Das 20.Jahrhundert begann mit dem Jahr 1901 und endete mit dem Jahr 2000 (am 31.Dez.). Also begann das 1.Jahrhundert mit dem Jahr 1 oder 01 oder 0001 ...Verzeihung, aber die Vornullen machen die Sache auch nicht besser, oder ? Schönen Abend LenderKarl 20:26, 10. Mär. 2010 (CET)Beantworten

Also wenn ich "01" lese, komme ich nur ins Meditieren, ob 1901 oder 2001 gemeint sein könnte. Auf 0001 komme ich erstmal gar nicht. Die Schreibweise mit den Vornullen wäre aber so ungewöhnlich, dass sie doch sehr schnell in diese Richtung lenken würde, ohne dass man erst näher den Inhalt studieren müsste. Und überhaupt: wieso dann eigentlich 01 und nicht gleich einfach 1? Das erschiene mir eher klarer. --PeterFrankfurt 01:00, 11. Mär. 2010 (CET)Beantworten

Danke PeterFrankfurt, ich werde das entspr. Deines Vorschlags ändern! LenderKarl 06:36, 11. Mär. 2010 (CET)Beantworten

Peinlich ist es schon, aber meine Antwort von heute früh war "verfrüht"; wie treffend...Ich hätte es gern gemacht, wie initiiert. Aber dann gibt es wieder keinen Bezug zu den Tabellenzeilen, welche mit 01,...beginnen. Das zu ändern ist aber nicht sinnvoll, da man den 700-Jahre-Turnus nicht außer acht lassen kann (wichtiger). Wenn ich nun anstatt "01.01.01" in die Überschrift "1.Jan.nach Christus" hineinbringe, bin ich schon von der Bezeichnung her in Widerspruch zur ISO 8601"Kalenderwoche". Genau genommen muss in die Bezeichnung der Fakt der Augusteischen Korrektur hinein; " ab dem Jahr 8 n.Chr." Ein Kalender an sich ist eben ein Kompromiss; dieser eben auch. Ansonsten empfehle ich die Disk.seite zum Jul.Kal zum Bezugspunkt "Gegenwart". Frdl. Grüße an alle Mitmacher LenderKarl 14:30, 11. Mär. 2010 (CET)Beantworten

Bitte um ....[Quelltext bearbeiten]

die Mitteilung, auf welchen Tag der 1.1.1472 fiel. Danke! --Claus Diskussionsseite 15:24, 30. Mai 2011 (CEST)Beantworten

Guten Abend Claus, ehe ich Dir die Antwort gebe, versuche ich zwei Bilder/Dateien aus Commons Dir zu übermitteln (ich bin computerisch nicht sehr perfekt...und in Deinem Alter) http://commons.wikimedia.org/wiki/Category:Perpetual_calendars?uselang=de Und hier bitte einmal auf "Ewiger_Dauerkalender_ab_01.01.01.png" und dann daneben auf "Ewiger_Julianischer_Kalender.png" (Oberste Reihe). Das Ergebnis muss man nicht glauben, da das System auf einfache Weise überprüft werden kann (Jedes Jahr "rückt" der 1.Jan. einen Tag weiter, nach dem Schaltjahr zwei. Dabei geht man zwecks Kontrollmöglichkeit am einfachsten von Gegenwartsjahr aus ) Der 1.Januar 1472 fällt auf "Mittwoch" ! in beiden Kal. übereinstimmend. Schönen Abend wünscht --LenderKarl 16:44, 4. Jan. 2012 (CET)Beantworten

Ewige Kalender[Quelltext bearbeiten]

Diese neu eingefügten, riesigen Bilder mit den ewigen Kalendern zerkloppen den ganzen Artikel. Sie haben einen eigenen Artikel, hier gehören sie nur als absoluter Nebenaspekt dazu, diese Ausführlichkeit, die alles andere erschlägt, ist also unangebracht. Eine einfache Verlinkung beim Hinweis, dass sie zur Kontrolle herangezogen werden können, sollte doch wohl reichen. Sprich: Ich möchte die gelöscht sehen. --PeterFrankfurt 03:55, 5. Jan. 2012 (CET)Beantworten

Wochentag berechnen "Webers Formeln"[Quelltext bearbeiten]

weberlars.tata@gmail.com

Ich verstehe nicht genau, wieso muss man so umständlich erklären wie man einen Wochentag berechnet! Wenn das Jahr, Monat und Tag gegeben ist und nehmt an, das die auch richtig sind (validiert), dann kann man einfach mit dem Formeln den Wochentag berechnen:


Vorher aber treffen wir Ein-Paar Kleinigkeiten:

MOD ist Modulo (Rest einer Division)

INT ist das Ganzteilige Teil von Division

Jahr ist das Jahr in Ganzen nicht aufgeteilt in Jahrhundert und so

Monat ist Monat. Wenn Monat Jan (01) oder Feb (02) gemeint ist dann wird Monat +12 aufadiert und gleizeitig das Jahr (-1) subtrahiert.

0=Sonntag, 1=Montag, 2=Dienstag usw...


Also:

IF monat<3 THEN monat+12 AND jahr-1

(jahr + INT(jahr/4) - INT(jahr/100) + INT(jahr/400) + INT((660*monat-1296)/256) + tag) MOD 7


Beispiel: 13.05.2013 ist 1 also Montag

2013+503-20+5+(5*660-1296)/256+13=

2501+7+13=2521

2521 MOD 7 = 1


Beispiel: 08.02.1907 ist 5 also Freitag

Monat<3 also Monat+12 und Jahr-1 !!!

1906+476-19+4+(14*660-1296)/256+8=

2367+31+8=2406

2406 MOD 7 = 5

--188.156.108.243 23:29, 13. Mai 2013 (CEST)Beantworten