# Feiertage berechnen



## DP (18. Mrz 2005)

hi. gibt es irgendwelche fertigen klassen, die mir die feiertage in deutschland berechnen können?

danke


----------



## Destiny1985 (18. Mrz 2005)

Ich habe nen programm geschrieben das dir von jedem Jahr den Ostersonntag berechnet...aber ich glaub das kannste nicht brauchen oder ^^


----------



## DP (18. Mrz 2005)

doch...darauf basieren die ganzen feiertage


----------



## bygones (18. Mrz 2005)

DP hat gesagt.:
			
		

> hi. gibt es irgendwelche fertigen klassen, die mir die feiertage in deutschland berechnen können?


also von Sun definitiv nicht - von anderen habe ich noch nichts gehört


----------



## Destiny1985 (18. Mrz 2005)

also dann hier der code für ostersonntag:


```
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 + ".");
  }
}
```


----------



## Sky (18. Mrz 2005)

Sag mal, wie funktioniert der Algo. bzw. wo ist er her... habe keine Lust mich durch die ganzen a,b,c,d,e,n usw. durchzuarbeiten... sprechende Variablennamen hätten mir vielleicht schon geholfen


----------



## Destiny1985 (18. Mrz 2005)

Frag mich net wie der geht 

Hab den...ja wo hab ich den her...damals hätt ich ihn dir erklären können mittlerweile muss ich da selber erstmal ganz neu durchsteigen =(


----------



## DP (18. Mrz 2005)

hier: 



> 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:
> 
> ...



Quelle: http://www.ptb.de/de/org/4/44/441/oste.htm


----------



## DP (18. Mrz 2005)

so kinners, hier mal ne methode die prüft ob ein gragoriancalendar ein feiertag ist:


```
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;
    }
    
    
  }
```


----------

