Wochentag eines Datums berechnen

Alsou

Aktives Mitglied
Hallo, ich hätte da eine Frage und zwar wieso man da keine case-Anweisung für den Monat Januar braucht. Vielen Dank


Java:
 public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		int tag=23;
		int monat=1;
		int jahr=1949;
		
		int wochentag=(jahr-1900)*365 + (jahr-1900)/4;
		
		if (jahr %4==0 && monat<=2){
			wochentag--;	
		}

		
		switch (monat){
		case 12: wochentag+=30;
		case 11: wochentag+=31;
		case 10: wochentag+=30;
		case 9: wochentag+=31;
		case 8: wochentag+=31;
		case 7: wochentag+=30;
		case 6: wochentag+=31;
		case 5: wochentag+=30;
		case 4: wochentag+=31;
		case 3: wochentag+=28;
		case 2: wochentag+=31;
		}
		
		wochentag=(tag+wochentag)%7;
		
		switch (wochentag){
		case 0: System.out.println("Sonntag");
		break;
		case 1: System.out.println("Montag");
		break;
		case 2: System.out.println("Dienstag");
		break;
		case 3: System.out.println("Mittwoch");
		break;
		
		case 4: System.out.println("Donnerstag");
		break;
		
		case 5: System.out.println("Freitag");
		break;
		
		case 6: System.out.println("Samstag");
		break;
		
		}
		
		
	}

}
 
Naja Januar ist der erste Monat...macht doch da keinen Sinn 31 Tage oder sonst wie drauf zu addieren...Hast du dir mal angeschaut was das switch macht bei z.B. dem Monat 12? Welche Fälle werden da durchlaufen? ..mal drüber nachdenken...🙂
 
soweit ich weiß sind die case-anweisungen Einsprungsmarken zu denen gesprungen wird, wenn der Ausdruck den entsprechenden Wert annimmt. Da gibst aber keine case 1... Woher weiß der Compiler welche case-anweisung er ausführen soll...🙁
 
switch kannst du dir als ein if-elseif kontruktr vorstellen.
und wenn er kein passendes case findet dann wird auch nichts ausgeführt 😉
 
Naja in dem Fall hat switch aber Durchfall(by Christan U. 😀), d.h. bei case 12 werden auch alle anderen durchlaufen(was ja auch gerade der Sinn hier ist).

Mal etwas anders:

Wenn du den 1. Februar hast, wie viele Tage sind dann bereits im Jahr vergangen? (siehe case2!)
(vllt wirds bei case 3 (März bzw. Februar=28 Tage klar!)
Wenn du den 1. Januar hast, wie viele Tage sind dann vergangen(und wie viele musst du also drauf addieren?)
 
Da war wohl jemand in switch-Statements verliebt. Ich finde diese Version viel klarer und lesbarer:
Java:
public class WeekDay {

    public static final int[] tageImMonat = {
        31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    public static final String[] tagNamen = {
        "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"};

    public static void main(String[] args) {
        System.out.println(wochenTag(23, 1, 1949));
    }

    public static String wochenTag(int tag, int monat, int jahr) {

        int wochentag = (jahr - 1900) * 365 + (jahr - 1900) / 4;

        if (jahr % 4 == 0 && monat <= 2) {
            wochentag--;
        }

        for(int i = 0; i < monat - 1; i++) {
            wochentag += tageImMonat[i];
        }

        wochentag = (tag + wochentag) % 7;

        return tagNamen[wochentag];
    }
}
 

Zurück
Oben