Advertisement
dimipan80

Days between Two Dates (using LocalDate)

Aug 19th, 2014
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.84 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.time.LocalDate;
  7. import java.time.format.DateTimeFormatter;
  8. import java.util.Scanner;
  9.  
  10. public class _07_DaysBetweenTwoDates_Using_LocalDate {
  11.  
  12.     public static void main(String[] args) {
  13.         // TODO Auto-generated method stub
  14.         Scanner scan = new Scanner(System.in);
  15.         System.out.println("Enter 2 dates exactly in this format [day-month-year]: ");
  16.         String firstInputStr = scan.next();
  17.         String secondInputStr = scan.next();
  18.  
  19.         LocalDate startDate = convertSpecificInputDateStringToLocalDate(firstInputStr);
  20.         LocalDate endDate = convertSpecificInputDateStringToLocalDate(secondInputStr);
  21.  
  22.         long resultDays = 0;
  23.         if (!endDate.equals(startDate)) {
  24.             boolean resultIsNegative = endDate.isBefore(startDate);
  25.             int startYear = startDate.getYear();
  26.             int startDayOfYear = startDate.getDayOfYear();
  27.             int endYear = endDate.getYear();
  28.             int endDayOfYear = endDate.getDayOfYear();
  29.             int yearsBetweenDates = getYearsBetweenTwoDates(resultIsNegative,
  30.                     startYear, startDayOfYear, endYear, endDayOfYear);
  31.  
  32.             double daysBetweenDates = yearsBetweenDates * 365.2425;
  33.             int differenceDayOfYear = getDifferenceFromDayOfYearComponent(
  34.                     resultIsNegative, startDayOfYear, endDayOfYear);
  35.  
  36.             resultDays = Math.round(daysBetweenDates + differenceDayOfYear);
  37.  
  38.         }
  39.         System.out.printf("The number of Days between these 2 dates is: %d !\n",
  40.                 resultDays);
  41.     }
  42.  
  43.     private static int getDifferenceFromDayOfYearComponent(
  44.             boolean resultIsNegative, int startDayOfYear, int endDayOfYear) {
  45.         int differenceDayOfYear = 0;
  46.         if (endDayOfYear != startDayOfYear) {
  47.             differenceDayOfYear = endDayOfYear - startDayOfYear;
  48.             if (resultIsNegative && endDayOfYear > startDayOfYear) {
  49.                 differenceDayOfYear -= 365;
  50.             } else if (!resultIsNegative && endDayOfYear < startDayOfYear) {
  51.                 differenceDayOfYear += 365;
  52.             }
  53.         }
  54.         return differenceDayOfYear;
  55.     }
  56.  
  57.     private static int getYearsBetweenTwoDates(boolean resultIsNegative,
  58.             int startYear, int startDayOfYear, int endYear, int endDayOfYear) {
  59.         int yearsBetweenDates = 0;
  60.         if (endYear != startYear) {
  61.             yearsBetweenDates = endYear - startYear;
  62.             if (resultIsNegative && endDayOfYear > startDayOfYear) {
  63.                 yearsBetweenDates += 1;
  64.             } else if (!resultIsNegative && endDayOfYear < startDayOfYear) {
  65.                 yearsBetweenDates -= 1;
  66.             }
  67.         }
  68.         return yearsBetweenDates;
  69.     }
  70.  
  71.     private static LocalDate convertSpecificInputDateStringToLocalDate(String inputStr) {
  72.         // TODO Auto-generated method stub
  73.         DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("d-MM-yyyy");
  74.         return LocalDate.parse(inputStr, dateFormat);
  75.     }
  76.  
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement