also von Sun definitiv nicht - von anderen habe ich noch nichts gehörtDP hat gesagt.:hi. gibt es irgendwelche fertigen klassen, die mir die feiertage in deutschland berechnen können?
import java.io.*;
public class Ostersonntag
{
public static void main (String[] args) throws IOException
{
BufferedReader stdin =
new BufferedReader ( new InputStreamReader ( System.in ) );
System.out.print("Bitte Jahr eingeben: ");
String inData = stdin.readLine();
int jahr = Integer.parseInt ( inData );
int a = jahr % 19;
int b = jahr % 4;
int c = jahr % 7;
int monat = 0;
int m = (8 * (jahr / 100) + 13) / 25 - 2;
int s = jahr / 100 - jahr / 400 - 2;
m = (15 + s - m) % 30;
int n = (6 + s) % 7;
int d = (m + 19 * a) % 30;
if ( d == 29 )
d = 28;
else if (d == 28 && a >= 11)
d = 27;
int e = (2 * b + 4 * c + 6 * d + n) % 7;
int tag = 21 + d + e + 1;
if (tag > 31)
{
tag = tag % 31;
monat = 4;
}
if (tag <= 31)
monat = 3;
System.out.print("\nIm Jahr " + jahr + " ist der Ostersonntag am " + tag);
System.out.println("." + monat + ".");
}
}
Ostern wird nach einer christlichen Tradition am ersten Sonntag nach dem ersten Vollmond des Frühjahrsanfangs auf der nördlichen Halbkugel gefeiert. Die Bestimmung des kalendarischen Datums nutzt die zyklische Natur der Erd- und Mondbewegung aus (76 Jahre = 940 Mond-Monate = 27759 Tage, Kallippischer Zyklus, benannt nach Kallippos aus Kyzikos, um 330 v. Chr.). Sie nimmt dagegen keine Rücksicht auf aktuelle astronomische Beobachtungen von Vollmond und Tag-und-Nacht-Gleichen. Zur besseren Anpassung an die tatsächlichen Umlaufzeiten von Mond und Erde werden seit der Einführung des Gregorianischen Kalenders an den Jahrhundertgrenzen gewisse Korrekturen am Kallippischen Zyklus angebracht. Carl Friedrich Gauß (1777 - 1855) hat aus den langen und schwer verständlichen Texten von Christophorus Clavius eine praktische Rechenvorschrift abgeleitet. Diese wird hier in einer von Dr. Heiner Lichtenberg, Bonn, modifizierten Form angegeben (H. Lichtenberg, Zur Interpretation der Gaußschen Osterformel und ihrer Ausnahmeregeln, Historia Mathematica 24, 441 - 444 (1997)). In dieser modernen Form lässt sie sich nämlich leicht in ein Computerprogramm übersetzen, um das Osterdatum für jedes Jahr zu errechnen. Das Ergebnis ist für 1980 bis 2031 in der Osterfesttabelle aufgeführt.
In den nachfolgenden Gleichungen bezeichnen INT (a/b) den ganzzahligen Teil des Quotienten zweier Zahlen a und b und MOD (a, b) den nicht-negativen Rest, den a beim Teilen durch b lässt. Zu berechnen ist im einzelnen für die Jahreszahl X:
(1) K = INT (X/100);
(2) M = 15 + INT ((3K+3)/4) - INT ((8K+13)/25);
(3) S = 2 - INT ((3K+3)/4);
(4) A = MOD (X, 19);
(5) D = MOD (19A+M, 30);
(6) R = INT (D/29) + (INT (D/28) - INT (D/ 29)) · INT (A/11);
(7) OG = 21 + D - R;
(8) SZ = 7 - MOD (X+INT (X/4)+S, 7);
(9) OE = 7 - MOD (OG-SZ, 7);
OG ist das Märzdatum des Ostervollmonds. Dies entspricht dem 14. Tag des ersten Monats im Mondkalender, genannt Nisanu. SZ ist das Datum des ersten Sonntags im März.
OS = OG + OE ist das Datum des Ostersonntags, als Datum im Monat März dargestellt. (Der 32. März entspricht also dem 1. April, usw.)
Liegt der Ostertermin (OS) erst einmal fest, so berechnen sich daraus weitere besondere Kalenderdaten, und zwar
OS - 46: Aschermittwoch,
OS + 39: Christi Himmelfahrt,
OS + 49: Pfingstsonntag,
OS+ 60: Fronleichnam.
private boolean isFeiertag()
{
int jahr = super.get(Calendar.YEAR);
int a = jahr % 19;
int b = jahr % 4;
int c = jahr % 7;
int monat = 0;
int m = (8 * (jahr / 100) + 13) / 25 - 2;
int s = jahr / 100 - jahr / 400 - 2;
m = (15 + s - m) % 30;
int n = (6 + s) % 7;
int d = (m + 19 * a) % 30;
if (d == 29)
d = 28;
else if (d == 28 && a >= 11)
d = 27;
int e = (2 * b + 4 * c + 6 * d + n) % 7;
int tag = 21 + d + e + 1;
if (tag > 31)
{
tag = tag % 31;
monat = 3;
}
if (tag <= 31)
monat = 2;
GregorianCalendar gc_ostersonntag = new GregorianCalendar(jahr, monat, tag);
GregorianCalendar gc_ostermontag = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), gc_ostersonntag.get(Calendar.MONTH), (gc_ostersonntag.get(Calendar.DATE) + 1));
GregorianCalendar gc_karfreitag = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), gc_ostersonntag.get(Calendar.MONTH), (gc_ostersonntag.get(Calendar.DATE) - 2));
GregorianCalendar gc_rosenmontag = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), gc_ostersonntag.get(Calendar.MONTH), (gc_ostersonntag.get(Calendar.DATE) - 48));
GregorianCalendar gc_christihimmelfahrt = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), gc_ostersonntag.get(Calendar.MONTH), (gc_ostersonntag.get(Calendar.DATE) + 39));
GregorianCalendar gc_pfinstsonntag = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), gc_ostersonntag.get(Calendar.MONTH), (gc_ostersonntag.get(Calendar.DATE) + 49));
GregorianCalendar gc_pfinstmontag = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), gc_ostersonntag.get(Calendar.MONTH), (gc_ostersonntag.get(Calendar.DATE) + 50));
GregorianCalendar gc_frohnleichnahm = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), gc_ostersonntag.get(Calendar.MONTH), (gc_ostersonntag.get(Calendar.DATE) + 60));
GregorianCalendar gc_wiedervereinigung = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), 9, 1);
GregorianCalendar gc_weihnachten_1 = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), 11, 24);
GregorianCalendar gc_weihnachten_2 = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), 11, 25);
GregorianCalendar gc_weihnachten_3 = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), 11, 26);
GregorianCalendar gc_silvester = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), 11, 31);
GregorianCalendar gc_neujahr = new GregorianCalendar(gc_silvester.get(Calendar.YEAR), 0, 1);
if(gc_ostermontag.equals(this) || gc_karfreitag.equals(this) || gc_rosenmontag.equals(this) || gc_christihimmelfahrt.equals(this) || gc_pfinstmontag.equals(this) || gc_frohnleichnahm.equals(this) || gc_weihnachten_1.equals(this) || gc_weihnachten_2.equals(this) || gc_weihnachten_3.equals(this) || gc_silvester.equals(this) || gc_neujahr.equals(this) || gc_wiedervereinigung.equals(this))
{
return true;
}
else
{
return false;
}
}