Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Write a program to calculate the difference between two dates in number of days.
- * The dates are entered at two consecutive lines in format day-month-year.
- * Days are in range [1…31]. Months are in range [1…12].
- * Years are in range [1900…2100]. */
- import java.util.Arrays;
- import java.util.Scanner;
- public class _07_DaysBetweenTwoDates_WithArrays {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Scanner scan = new Scanner(System.in);
- System.out.println("Enter 2 dates exactly in this format [day-month-year]: ");
- String firstInputStr = scan.next();
- String secondInputStr = scan.next();
- int[] startDate = createComponentsOfDateFromInputStringInArray(firstInputStr);
- int[] endDate = createComponentsOfDateFromInputStringInArray(secondInputStr);
- long resultDays = 0;
- boolean twoDatesAreEquals = Arrays.equals(startDate, endDate);
- if (!twoDatesAreEquals) {
- boolean resultIsNegative = false;
- if (startDate[2] > endDate[2] || (startDate[2] == endDate[2]
- && startDate[1] > endDate[1]) || (startDate[2] == endDate[2]
- && startDate[1] == endDate[1] && startDate[0] > endDate[0])) {
- resultIsNegative = true;
- int[] tempArr = Arrays.copyOf(startDate, startDate.length);
- startDate = Arrays.copyOf(endDate, endDate.length);
- endDate = Arrays.copyOf(tempArr, tempArr.length);
- }
- int yearsBetweenDates = getYearsBetweenTwoDates(startDate, endDate);
- double totalDaysBetween = 365.2425 * yearsBetweenDates;
- totalDaysBetween += getDaysFromDayAndMonthBetweenTwoDates(
- startDate, endDate);
- if (resultIsNegative) {
- totalDaysBetween *= -1;
- }
- resultDays += Math.round(totalDaysBetween);
- }
- System.out.printf("The number of Days between these 2 dates is: %d !\n",
- resultDays);
- }
- private static double getDaysFromDayAndMonthBetweenTwoDates(int[] start, int[] end) {
- // TODO Auto-generated method stub
- double daysBetween = 0;
- int months = 0;
- if (start[1] > end[1]) {
- months = (12 + end[1]) - start[1];
- if (start[0] > end[0]) {
- months -= 1;
- daysBetween += (30 + end[0]) - start[0];
- } else {
- daysBetween += end[0] - start[0];
- }
- } else {
- months = end[1] - start[1];
- if (months > 0 && start[0] > end[0]) {
- months -= 1;
- daysBetween += (30 + end[0]) - start[0];
- } else {
- daysBetween += end[0] - start[0];
- }
- }
- daysBetween += 30.4 * months;
- return daysBetween;
- }
- private static int getYearsBetweenTwoDates(int[] start, int[] end) {
- // TODO Auto-generated method stub
- int years = end[2] - start[2];
- if (years > 0 && (end[1] < start[1] || (end[1] == start[1] && end[0] < start[0]))) {
- years -= 1;
- }
- return years;
- }
- private static int[] createComponentsOfDateFromInputStringInArray(
- String inputStr) {
- // TODO Auto-generated method stub
- String[] dateStr = inputStr.split("[-]+");
- int[] dateComps = new int[dateStr.length];
- for (int i = 0; i < dateComps.length; i++) {
- dateComps[i] = Integer.parseInt(dateStr[i]);
- }
- return dateComps;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement