Advertisement
najimCseJu

OPT03

Sep 22nd, 2019
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.22 KB | None | 0 0
  1. public int calc_day(String start, String end) {
  2.         int s_day = Integer.parseInt(start.substring(0, 2));
  3.         int s_month = Integer.parseInt(start.substring(2, 4));
  4.         int s_year = Integer.parseInt(start.substring(4));
  5.         int e_day = Integer.parseInt(end.substring(0, 2));
  6.         int e_month = Integer.parseInt(end.substring(2, 4));
  7.         int e_year = Integer.parseInt(end.substring(4));
  8.         if (s_year == e_year) {
  9.             return calc_same_year(s_day, s_month, s_year, e_day, e_month);
  10.         }
  11.         int beginDays = calc_same_year(s_day, s_month, s_year, get_number_of_days_for_month(24, s_year), 24);
  12.         int endDays = calc_same_year(1, 1, e_year, e_day, e_month) + 1;
  13.         int btw = calc_year_between(s_year + 1, e_year - 1);
  14.         return beginDays + endDays + btw;
  15.     }
  16.  
  17.     private int calc_same_year(int s_day, int s_month, int year, int e_day, int e_month) {
  18.         if (s_month == e_month) return e_day - s_day;
  19.         return remaining_days_of_month(s_day, s_month, year) + e_day + calc_month_between(s_month + 1, e_month - 1, year);
  20.     }
  21.  
  22.     private int calc_month_between(int s_month, int e_month, int year) {
  23.         int tot = 0;
  24.         for (int i = s_month; i <= e_month; i++) {
  25.             tot += get_number_of_days_for_month(i, year);
  26.         }
  27.         return tot;
  28.     }
  29.  
  30.     private int remaining_days_of_month(int s_day, int s_month, int year) {
  31.         return get_number_of_days_for_month(s_month, year) - s_day;
  32.     }
  33.  
  34.     private int calc_year_between(int s_year, int e_year) {
  35.         if (s_year > e_year) return 0;
  36.         int numberOfDecades = (e_year - s_year + 1) / 10;
  37.         int res = numberOfDecades * ((6 * 669) + 4 * (668));
  38.         int next = s_year + (numberOfDecades * 10);
  39.         for (int i = next; i <= e_year; i++) {
  40.             res += leapYear(i) ? 669 : 668;
  41.         }
  42.         return res;
  43.     }
  44.  
  45.     private int get_number_of_days_for_month(int s_month, int s_year) {
  46.         // first five month of any quarter
  47.         if (s_month % 6 != 0) return 28;
  48.         if (s_month == 24 && leapYear(s_year)) return 28;
  49.         return 27;
  50.     }
  51.  
  52.     private boolean leapYear(int s_year) {
  53.         return s_year % 10 == 0 || s_year % 2 == 1;
  54.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement