Finding days difference in java

后端 未结 5 471
有刺的猬
有刺的猬 2021-01-15 18:53

After consulting a few forums, I ended up using the code below to find the days difference. But, I see a problem with the logic (may be it\'s my over sight?). I see that for

相关标签:
5条回答
  • 2021-01-15 19:00

    Use Joda Time's Days#daysBetween(). There is no better way.

    DateMidnight createdDate = new DateMidnight(2013, 2, 11);
    
    for (int i = 11; i < 20; i++) {
    
        DateMidnight expirationDate = new DateMidnight(2013, 2, i);
        int dayDifference = Days.daysBetween(createdDate, expirationDate);
    
        System.out.println("11 to " + i + " = " + dayDifference);
    }
    
    0 讨论(0)
  • 2021-01-15 19:03

    Date(year,day, month ) constructor is deprecated. i would simply use Calendars methods to get the difference between two days:

    Calendar cal1=Calendar.getInstance();
    Calendar cal2=Calendar.getInstance();
    cal1.setTime(createdDate);
    cal2.setTime(expirationDate);
    System.out.println(cal2.get(Calendar.DAY_OF_MONTH )-cal1.get(Calendar.DAY_OF_MONTH ) );
    

    EDIT:

    Calendar cal1 = Calendar.getInstance();
    cal1.set(2013, 2, 11);
    Calendar cal2 = Calendar.getInstance();
    cal2.set(2013, 2, 11);
    for (int i = 11; i < 20; i++) {
     cal2.set(Calendar.DATE, i);
        System.out.println("11 to " + i + " = " + (cal2.get(Calendar.DAY_OF_MONTH) -cal1.get(Calendar.DAY_OF_MONTH)));
    }
    

    OUTPUT:

    11 to 11 = 0
    11 to 12 = 1
    11 to 13 = 2
    11 to 14 = 3
    11 to 15 = 4
    11 to 16 = 5
    11 to 17 = 6
    11 to 18 = 7
    11 to 19 = 8
    
    0 讨论(0)
  • 2021-01-15 19:11

    1000 * 60 * 60 * 24 is wrong way to find day difference. You can use JodaTime but there is a pure java solution.

    Let we have two inialized variables

    Calendar firstDay = ...;
    Calendar secondDay = ...;
    

    and

    firstDay.before(lastDay)
    

    is true.

    Run

    int firstDayNo = firstDay.get(Calendar.DAY_OF_YEAR);
    int secondDayNo = secondDay.get(Calendar.DAY_OF_YEAR);
    int dayDifference, yearMultiplier;
    
    dayDifference = -firstDayNo;
    yearMultiplier = secondDay.get(Calendar.YEAR) - firstDay.get(Calendar.YEAR);
    while (yearMultiplier > 0) {
        dayDifference += firstDay.getActualMaximum(Calendar.DAY_OF_YEAR);
        firstDay.add(Calendar.YEAR, 1);
        yearMultiplier--;
    }
    dayDifference += secondDayNo;
    
    return dayDifference;
    
    0 讨论(0)
  • 2021-01-15 19:16

    Using float, I see the problem. Using timestamp doesn't seem like a good approach to finding the days difference between 2 dates.

    11 to 11 = 0.0
    11 to 12 = 1.0
    11 to 13 = 2.0
    11 to 14 = 3.0
    11 to 15 = 3.9583333
    11 to 16 = 4.9583335
    11 to 17 = 5.9583335
    11 to 18 = 6.9583335
    11 to 19 = 7.9583335

    Going forward, I find the most conclusive way to determine the date difference as

    Calendar cre_calendar = new GregorianCalendar((2013), (1), 11);
            Calendar exp_calendar = new GregorianCalendar((2013), (1), 19);
            Calendar maxDays = new GregorianCalendar(((2013)), (12), 31);
    
            if (exp_calendar.get(Calendar.DAY_OF_YEAR) < cre_calendar
                    .get(Calendar.DAY_OF_YEAR)) {
                System.out
                        .println((exp_calendar.get(Calendar.DAY_OF_YEAR) + maxDays
                                .get(Calendar.DAY_OF_YEAR))
                                - cre_calendar.get(Calendar.DAY_OF_YEAR));
            } else {
                System.out.println((exp_calendar.get(Calendar.DAY_OF_YEAR))
                        - cre_calendar.get(Calendar.DAY_OF_YEAR));
            }
    
    0 讨论(0)
  • 2021-01-15 19:20

    At least in the current version your code prints correct results

    11 to 11 = 0
    11 to 12 = 1
    11 to 13 = 2
    11 to 14 = 3
    11 to 15 = 4
    11 to 16 = 5
    11 to 17 = 6
    11 to 18 = 7
    11 to 19 = 8
    

    Nevertheless new Date((2013 + 1900), (1 + 1), 11); is incorrect, in fact it is 5813-03-01. It should be new Date((2013 - 1900), (1 - 1), 11); see Date(int year, int month, int day) API

    Parameters:
    year - the year minus 1900.
    month - the month between 0-11.
    date - the day of the month between 1-31.
    
    0 讨论(0)
提交回复
热议问题