[Java] Aus Datum den Wochentag errechnen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [Java] Aus Datum den Wochentag errechnen

    Eingabe eines Datums (Tag, Monat, Jahr) mit anschließender Ausgabe des entsprechenden Wochentags.

    Quellcode

    1. /*
    2. * Created on 20.02.2006
    3. *
    4. * TODO
    5. */
    6. /**
    7. *
    8. * TODO
    9. */
    10. import java.io.*;
    11. public class datum_wochentag
    12. {
    13. public static void main(String[] args) throws IOException
    14. {
    15. BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
    16. System.out.println("Tag:");
    17. String tach = eingabe.readLine();
    18. int t = Integer.parseInt(tach);
    19. System.out.println("Monat:");
    20. String monat = eingabe.readLine();
    21. int m = Integer.parseInt(monat);
    22. System.out.println("Jahr:");
    23. String joar = eingabe.readLine();
    24. int j = Integer.parseInt(joar);
    25. int m2, j2=j;
    26. if(m<=2)
    27. {m2=m+10;
    28. j2=j-1;}
    29. else
    30. m2=m-2;
    31. int c = j2/100;
    32. int y = j2%100;
    33. int h = (((26*m2-2)/10)+t+y+y/4+c/4-2*c)%7;
    34. if(h<0)
    35. h=h+7;
    36. if(h==0)
    37. System.out.println("Sonntag, "+t+"."+m+"."+j);
    38. if(h==1)
    39. System.out.println("Montag, "+t+"."+m+"."+j);
    40. if(h==2)
    41. System.out.println("Dienstag, "+t+"."+m+"."+j);
    42. if(h==3)
    43. System.out.println("Mittwoch, "+t+"."+m+"."+j);
    44. if(h==4)
    45. System.out.println("Donnerstag, "+t+"."+m+"."+j);
    46. if(h==5)
    47. System.out.println("Freitag, "+t+"."+m+"."+j);
    48. if(h==6)
    49. System.out.println("Samstag, "+t+"."+m+"."+j);
    50. }
    51. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Tesafilm ()

  • BlueJ ist eine IDE (Entwicklingsumgebung)
    wenn der code bei dir nicht funktioniert, dann nur, weil du eine alte Java Version verwendest

    • BlueJ deinstallieren
    • Java 1.5 installieren - Download hier
    • BlueJ erneut installieren


    eventuell wirst du bei der installation nochmal gefragt, welche java version du verwenden möchtest - dann einfach V. 1.5 auswählen
  • Vielleicht hilft euch diese Erklärung weiter:

    http://www.easy-coding.de/wochentag-eines-tages-im-jahr-herausfinden-t1898.html#7272
    289 / 7 = 41 Rest 2
    287 Modulo 7 ergibt also 2

    gegeben war 17. tag = mittwoch
    17%7 = 2 Rest 3

    wenn 3 also ein mittwoch ist, dann ist 2 ein dienstag, 1 ein montag, 0 ein sonntag
    dein kumpel hat wohl definiert, dass sonntag die woche bei montag anfängt
    also ist 0=montag, 6=sonntag
  • Warum nimmst du nicht einfach die Klasse GregorianCalendar.
    Anbei Code zum berechnen der österreichischen Feiertag:


    Quellcode

    1. import java.util.Calendar;
    2. import java.util.GregorianCalendar;
    3. import java.util.Iterator;
    4. import java.util.Map;
    5. import java.util.TreeMap;
    6. /**
    7. * Calculate austrian holidays. Valid since the year 1584.
    8. */
    9. public class HolidayCalc
    10. {
    11. private final int m_nYear;
    12. private final Map<Calendar, String> m_aHolidays = new TreeMap<Calendar, String> ();
    13. /**
    14. * Get the date representing eastzer sunday
    15. *
    16. * @return the date representing the easter sunday in the current year
    17. */
    18. private Calendar _getEasterSunday ()
    19. {
    20. int a = m_nYear % 19;
    21. int b = m_nYear / 100;
    22. int c = m_nYear % 100;
    23. int d = b / 4;
    24. int e = b % 4;
    25. int f = (b + 8) / 25;
    26. int g = (b - f + 1) / 3;
    27. int h = (19 * a + b - d - g + 15) % 30;
    28. int i = c / 4;
    29. int k = c % 4;
    30. int l = (32 + 2 * e + 2 * i - h - k) % 7;
    31. int m = (a + 11 * h + 22 * l) / 451;
    32. int n = (h + l - 7 * m + 114) / 31;
    33. int p = (h + l - 7 * m + 114) % 31 + 1;
    34. return new GregorianCalendar (m_nYear, n - 1, p);
    35. }
    36. /**
    37. * Add a new holiday
    38. *
    39. * @param nDay
    40. * the day: 1-31
    41. * @param nMonth
    42. * the month: 1-12
    43. * @param sWhich
    44. * name of the holiday
    45. */
    46. private void _addHoliday (int nDay, int nMonth, String sWhich)
    47. {
    48. m_aHolidays.put (new GregorianCalendar (m_nYear, nMonth - 1, nDay), sWhich);
    49. }
    50. /**
    51. * Add a new holiday
    52. *
    53. * @param aCal
    54. * the date to add
    55. * @param sWhich
    56. * name of the holiday
    57. */
    58. private void _addHoliday (Calendar aCal, String sWhich)
    59. {
    60. m_aHolidays.put (aCal, sWhich);
    61. }
    62. /**
    63. * Helper function to add/subtract days from a given date
    64. *
    65. * @param c
    66. * the source calendar
    67. * @param nDiffDays
    68. * the number of days to roll (signed!)
    69. * @return the resulting calendar
    70. */
    71. private Calendar _addDays (Calendar c, int nDiffDays)
    72. {
    73. Calendar c2 = (Calendar) c.clone ();
    74. c2.add (Calendar.DAY_OF_YEAR, nDiffDays);
    75. return c2;
    76. }
    77. public HolidayCalc (int nYear)
    78. {
    79. if (nYear <= 1583)
    80. throw new IllegalArgumentException ("Das Jahr muss > als 1583 sein!");
    81. m_nYear = nYear;
    82. // Add fixed holidays
    83. _addHoliday (1, 1, "Neujahr");
    84. _addHoliday (6, 1, "Heilige 3 Könige");
    85. _addHoliday (1, 5, "Tag der Arbeit");
    86. _addHoliday (15, 8, "Maria Himmelfahrt");
    87. // _addHoliday (3, 10, "Tag der deutschen Einheit");
    88. _addHoliday (26, 10, "Nationalfeiertag");
    89. // _addHoliday (31, 10, "Reformationstag");
    90. _addHoliday (1, 11, "Allerheiligen");
    91. _addHoliday (8, 12, "Maria Empfängnis");
    92. _addHoliday (24, 12, "Heiligabend");
    93. _addHoliday (25, 12, "Christtag");
    94. _addHoliday (26, 12, "Stefanitag");
    95. _addHoliday (31, 12, "Silvester");
    96. // Add holidays relative to easter sunday
    97. final Calendar aEaster = _getEasterSunday ();
    98. _addHoliday (aEaster, "Ostersonntag");
    99. // _addHoliday (_addDays (aEaster, -2), "Karfreitag");
    100. _addHoliday (_addDays (aEaster, 1), "Ostermontag");
    101. _addHoliday (_addDays (aEaster, 39), "Christi Himmelfahrt");
    102. _addHoliday (_addDays (aEaster, 49), "Pfingstsonntag");
    103. _addHoliday (_addDays (aEaster, 50), "Pfingstmontag");
    104. _addHoliday (_addDays (aEaster, 60), "Fronleichnam");
    105. if (false)
    106. {
    107. // Gets 3rd Wednesday in November
    108. final Calendar aBBDay = new GregorianCalendar (m_nYear, 11 - 1, 1);
    109. _addHoliday (_addDays (aBBDay, ( (11 - aBBDay.get (Calendar.DAY_OF_WEEK)) % 7) + 14),
    110. "Buß- und Bettag");
    111. }
    112. }
    113. private String _getWeekdayName (int i)
    114. {
    115. switch (i)
    116. {
    117. case Calendar.MONDAY:
    118. return "Mo";
    119. case Calendar.TUESDAY:
    120. return "Di";
    121. case Calendar.WEDNESDAY:
    122. return "Mi";
    123. case Calendar.THURSDAY:
    124. return "Do";
    125. case Calendar.FRIDAY:
    126. return "Fr";
    127. case Calendar.SATURDAY:
    128. return "Sa";
    129. case Calendar.SUNDAY:
    130. return "So";
    131. default:
    132. return Integer.toString (i);
    133. }
    134. }
    135. /**
    136. * Dummy
    137. */
    138. void print ()
    139. {
    140. Iterator<Calendar> it = m_aHolidays.keySet ().iterator ();
    141. while (it.hasNext ())
    142. {
    143. Calendar c = it.next ();
    144. String sWhat = m_aHolidays.get (c);
    145. String sCal = _getWeekdayName (c.get (Calendar.DAY_OF_WEEK)) + ' '
    146. + c.get (Calendar.DAY_OF_MONTH) + '.' + (1 + c.get (Calendar.MONTH)) + '.'
    147. + c.get (Calendar.YEAR);
    148. System.out.println (sCal + ": " + sWhat);
    149. }
    150. }
    151. /**
    152. * Dummy
    153. */
    154. public static void main (String [] args)
    155. {
    156. HolidayCalc hc = new HolidayCalc (2006);
    157. hc.print ();
    158. }
    159. }
    Alles anzeigen
  • Hallo,

    grundsätzlich ist die Formel gut, nur leider gibt es einen kleinen Fehler in der Berechnung der Wochentage. (Tagesdivision /3 ) fehlt

    so muss die Formel korrekt lauten

    int h = (((26*m2-2)/10)+day_Beg-3+y+y/4+c/4-2*c)%7;


    LG

    Bladetown