Hallo,
ich würde gern den Wochentag zu einem gegebenen Datum bestimmen. natürlich funktioniert das mit der Calendar-Klasse einwandfrei, für ein Projekt müsste ich das allerdings "manuell" implementieren. Ich habe dazu folgenden Code erstellt:
Natürlich lässt sich der Quelltext noch optimieren, z. B. die Switches durch Arrays ersetzen oder mehrere Berechnungen in einer Formel zusammenfassen. Mir geht's allerdings erstmal nur um's Prinzip. Das Problem ist nämlich, dass Heiligabend dieses Jahr an einem Montag ist und nicht an einem Sonntag, wie diese Methode ausgibt. Ich vermute, dass es am Schalttag liegt, alleerdings dachte ich, dass der bei der Schaltjahreskorrektur (digit5) bereits berücksichtigt ist. Wie müsste ich das Ganze modifizieren?
Vielen Dank und viele Grüße
ich würde gern den Wochentag zu einem gegebenen Datum bestimmen. natürlich funktioniert das mit der Calendar-Klasse einwandfrei, für ein Projekt müsste ich das allerdings "manuell" implementieren. Ich habe dazu folgenden Code erstellt:
Code:
import java.util.*; public class Test { public String getDayOfWeek(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); // Tag, Monat, Jahr des Datums ermitteln int day = cal.get(Calendar.DAY_OF_MONTH); int month = cal.get(Calendar.MONTH); int year = cal.get(Calendar.YEAR); // die Tagesziffer berechnen int digit1 = day % 7; // die Monatsziffer bestimmen int digit2 = 0; switch (month) { case 0: // Januar digit2 = 0; break; case 1: // Februar digit2 = 3; break; case 2: // März digit2 = 3; break; case 3: // April digit2 = 6; break; case 4: // Mai digit2 = 1; break; case 5: // Juni digit2 = 4; break; case 6: // Juli digit2 = 6; break; case 7: // August digit2 = 2; break; case 8: // September digit2 = 5; break; case 9: // Oktober digit2 = 0; break; case 10: // November digit2 = 3; break; case 11: // Dezember digit2 = 5; break; } // die Jahresziffer berechnen int y = Integer.parseInt(Integer.toString(year).substring(2)); int digit3 = (y + y/4) % 7; // die Jahrhundertziffer berechnen int a = Integer.parseInt(Integer.toString(year).substring(0, 2)); int digit4 = (3 - (a % 4)) * 2; // die Schaltjahreskorrektur bestimmen int digit5 = 0; if (isLeapYear(year)) digit5 = 6; // Wochentag bestimmen int weekday = (digit1 + digit2 + digit3 + digit4 + digit5) % 7; // Name des Wochentages festlegen String dayName = ""; switch (weekday) { case 0: dayName = "Sonntag"; break; case 1: dayName = "Montag"; break; case 2: dayName = "Dienstag"; break; case 3: dayName = "Mittwoch"; break; case 4: dayName = "Donnerstag"; break; case 5: dayName = "Freitag"; break; case 6: dayName = "Samstag"; break; } return dayName; } private boolean isLeapYear(int year) { return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)); } public static void main(String[] args) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.DAY_OF_MONTH, 24); cal.set(Calendar.MONTH, 11); cal.set(Calendar.YEAR, 2012); Test t = new Test(); System.out.println(t.getDayOfWeek(cal.getTime())); } }
Vielen Dank und viele Grüße
Comment