Advertisement
dimipan80

Days between Two Dates (with Arrays)

Aug 19th, 2014
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.09 KB | None | 0 0
  1. /* Write a program to calculate the difference between two dates in number of days.
  2.  * The dates are entered at two consecutive lines in format day-month-year.
  3.  * Days are in range [1…31]. Months are in range [1…12].
  4.  * Years are in range [1900…2100]. */
  5.  
  6. import java.util.Arrays;
  7. import java.util.Scanner;
  8.  
  9. public class _07_DaysBetweenTwoDates_WithArrays {
  10.  
  11.     public static void main(String[] args) {
  12.         // TODO Auto-generated method stub
  13.         Scanner scan = new Scanner(System.in);
  14.         System.out.println("Enter 2 dates exactly in this format [day-month-year]: ");
  15.         String firstInputStr = scan.next();
  16.         String secondInputStr = scan.next();
  17.  
  18.         int[] startDate = createComponentsOfDateFromInputStringInArray(firstInputStr);
  19.         int[] endDate = createComponentsOfDateFromInputStringInArray(secondInputStr);
  20.  
  21.         long resultDays = 0;
  22.         boolean twoDatesAreEquals = Arrays.equals(startDate, endDate);
  23.         if (!twoDatesAreEquals) {
  24.             boolean resultIsNegative = false;
  25.             if (startDate[2] > endDate[2] || (startDate[2] == endDate[2]
  26.                            && startDate[1] > endDate[1]) || (startDate[2] == endDate[2]
  27.                && startDate[1] == endDate[1] && startDate[0] > endDate[0])) {
  28.                 resultIsNegative = true;
  29.                 int[] tempArr = Arrays.copyOf(startDate, startDate.length);
  30.                 startDate = Arrays.copyOf(endDate, endDate.length);
  31.                 endDate = Arrays.copyOf(tempArr, tempArr.length);
  32.             }
  33.  
  34.             int yearsBetweenDates = getYearsBetweenTwoDates(startDate, endDate);
  35.             double totalDaysBetween = 365.2425 * yearsBetweenDates;
  36.  
  37.             totalDaysBetween += getDaysFromDayAndMonthBetweenTwoDates(
  38.                     startDate, endDate);
  39.             if (resultIsNegative) {
  40.                 totalDaysBetween *= -1;
  41.             }
  42.  
  43.             resultDays += Math.round(totalDaysBetween);
  44.         }
  45.  
  46.         System.out.printf("The number of Days between these 2 dates is: %d !\n",
  47.                 resultDays);
  48.  
  49.     }
  50.  
  51.     private static double getDaysFromDayAndMonthBetweenTwoDates(int[] start, int[] end) {
  52.         // TODO Auto-generated method stub
  53.         double daysBetween = 0;
  54.         int months = 0;
  55.         if (start[1] > end[1]) {
  56.             months = (12 + end[1]) - start[1];
  57.             if (start[0] > end[0]) {
  58.                 months -= 1;
  59.                 daysBetween += (30 + end[0]) - start[0];
  60.             } else {
  61.                 daysBetween += end[0] - start[0];
  62.             }
  63.         } else {
  64.             months = end[1] - start[1];
  65.             if (months > 0 && start[0] > end[0]) {
  66.                 months -= 1;
  67.                 daysBetween += (30 + end[0]) - start[0];
  68.             } else {
  69.                 daysBetween += end[0] - start[0];
  70.             }
  71.         }
  72.  
  73.         daysBetween += 30.4 * months;
  74.         return daysBetween;
  75.     }
  76.  
  77.     private static int getYearsBetweenTwoDates(int[] start, int[] end) {
  78.         // TODO Auto-generated method stub
  79.         int years = end[2] - start[2];
  80.         if (years > 0 && (end[1] < start[1] || (end[1] == start[1] && end[0] < start[0]))) {
  81.             years -= 1;
  82.         }
  83.         return years;
  84.     }
  85.  
  86.     private static int[] createComponentsOfDateFromInputStringInArray(
  87.             String inputStr) {
  88.         // TODO Auto-generated method stub
  89.         String[] dateStr = inputStr.split("[-]+");
  90.         int[] dateComps = new int[dateStr.length];
  91.         for (int i = 0; i < dateComps.length; i++) {
  92.             dateComps[i] = Integer.parseInt(dateStr[i]);
  93.         }
  94.  
  95.         return dateComps;
  96.     }
  97.  
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement