jkhsjdhjs

Wochentagsberechnung

Feb 28th, 2016
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.73 KB | None | 0 0
  1. bool calc_leapyear(int y) {
  2.     // wenn das Jahr ohne Rest durch 4 teilbar ist -> Schaltjahr
  3.     if(!(y % 4)) {
  4.         // wenn es aber auch ohne Rest durch 100 teilbar ist -> kein Schaltjahr
  5.         if(!(y % 100)) {
  6.             // ist es aber nun auch durch 400 ohne Rest teilbar -> Schaltjahr
  7.             if(!(y % 400)) {
  8.                 return true;
  9.             }
  10.             else {
  11.                 return false;
  12.             }
  13.         }
  14.         else {
  15.             return true;
  16.         }
  17.     }
  18.     else {
  19.         return false;
  20.     }
  21. }
  22. //---------------------------------------------------------------------
  23. unsigned char get_max_days(unsigned char m, int y, bool w_ly) {
  24.     if(m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) {
  25.         return 31;
  26.     }
  27.     else if(m == 4 || m == 6 || m == 9 || m == 11) {
  28.         return 30;
  29.     }
  30.     else if(m == 2) {
  31.         if(calc_leapyear(y) && w_ly) {
  32.             return 29;
  33.         }
  34.         else {
  35.             return 28;
  36.         }
  37.     }
  38.     else {
  39.         return 0;
  40.     }
  41. }
  42. //---------------------------------------------------------------------
  43. unsigned char calc_day_of_week(unsigned char d, unsigned char m, int y) { //Nur für Jahre > 999 && Jahre < 10000 !
  44.     int day_digit, month_digit = 0, year_digit, century_digit;
  45.     day_digit = d % 7;
  46.     if(m != 1) {
  47.         for(unsigned char i = 1; i < m; i++) {
  48.             month_digit = (month_digit + (get_max_days(i, y, 0) % 7)) % 7;
  49.         }
  50.     }
  51.     year_digit = ((y % 100) + ((y % 100) / 4)) % 7;
  52.     century_digit = (3 - ((y / 100) % 4)) * 2;
  53.     if(calc_leapyear(y) && (m == 1 || m == 2)) {
  54.         day_digit--;
  55.     }
  56.     return (day_digit + month_digit + year_digit + century_digit) % 7;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment