# Wochentag berechnen



## Lestas89 (4. Apr 2016)

Mit dem folgenden Programm kann ein Wochentag berechnet werden. Eine Sache verstehe ich jedoch im Quellcode nicht:


```
import javax.swing.JOptionPane;

class Aufgabe63{
      public static void main (String[] args){
       
        String t,m,j, ausgabe;
        int tag,monat,jahr;
        //jh steht für das Jahrhundert, d.h. die vorderen zwei Ziffern der Jahreszahl
        //ja steht für das Jahr im Jahrhundert, d.h. die beiden letzten Ziffern der Jahreszahl
        int jh, ja;
       
        t = JOptionPane.showInputDialog("Geben Sie den Tag ein:");
        m = JOptionPane.showInputDialog("Geben Sie den Monat als Zahl ein:");
        j = JOptionPane.showInputDialog("Geben Sie das Jahr ein. Es muss zwischen 1900 und 2099 liegen:");
         
        tag = Integer.parseInt(t);
        monat = Integer.parseInt(m);
        jahr = Integer.parseInt(j);
       
        //Abfrage, ob Datum korrekt eingegeben wurde
        if(tag < 1 || tag > 31 || monat< 1 || monat > 12 || jahr < 1900 || jahr > 2099){
            JOptionPane.showMessageDialog(null,"Sie haben ein falsches Datum eingegeben.\nStarten Sie das Programm neu.\nTschuess");
            System.exit(0);
        }
       
       
        jh = jahr/100;
        ja = jahr%100;
       
       
        //Monat ist Januar oder Februar
        if ((monat == 1) || (monat == 2)){
       
            monat = monat +9;
            ja--;
        }
        else
            monat = monat -3;
           
        //Berechnung
        tag = ((146097*jh)/4+(1461*ja)/4+(153*monat+2)/5+tag+1721119)%7;
       
        //Nr. des Tages legt den Wochentag fest, gelöst durch if
        ausgabe = "";
       
        if (tag == 0)
            ausgabe = "Montag";
           
        if (tag == 1)
            ausgabe = "Dienstag";
       
        if (tag == 2)
            ausgabe = "Mittwoch";
           
        if (tag == 3)
            ausgabe = "Donnerstag";
       
        if (tag == 4)
            ausgabe = "Freitag";
           
        if (tag == 5)
            ausgabe = "Samstag";
           
        if (tag == 6)
            ausgabe = "Sonntag";
         
        JOptionPane.showMessageDialog(null,"Der "+t+"."+m+"."+j+" ist ein "+ausgabe+".");
         
     }
     
}
```

Wieso sind diese Operationen notwendig:

        jh = jahr/100;
        ja = jahr%100;

Vielen Dank im Voraus!


----------



## Piotre19910 (4. Apr 2016)

So wie ich dass sehe ist diese Operation notwendig damit du das jahrhundert und das jahr seperat anzeigen lassen kanst. Rechne es mall mit z.b. 2012 durch. da bekommst du für jh= 20 jahrhundert und ja=12 Jahre. hoffe du hast das gemeint


----------



## Lestas89 (4. Apr 2016)

Danke für deine Antwort!


----------



## Piotre19910 (4. Apr 2016)

bitte


----------



## Meniskusschaden (5. Apr 2016)

Ich glaube, Jahreszahl und Jahrhundert werden getrennt, damit man die Schaltjahresberechnung in den Griff bekommt, denn die Jahrhundertwechsel sind ja nur alle 400 Jahre ein Schaltjahr. Ein "normales" Jahrhundert hat 76 normale und 24 Schaltjahre, also`76*365+24*366 = 36524`Tage. Vier Jahrhundete hätten demnach`36524*4 =146096`Tage, wenn es nicht alle 400 Jahre noch ein Schaltjahr geben würde. Mit diesem extra Schalttag sind es dann 146097 Tage für 400 Jahre.


----------



## Schesam (5. Apr 2016)

Man kann auch einfach Java8 benutzen^^

```
System.out.println(LocalDate.of(2016, 4, 5).getDayOfWeek());
```
Auf deutsch:

```
System.out.println(LocalDate.of(2016, 4, 5).getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.GERMAN));[/java]

Das ganze dann in einer Zeile
```


----------

