java新手,编译万年历中1990年1.1到某一年的天数,比如1990.2月。计算出来只是连续两个2月相加,求大神解

2025-02-06 12:04:13
推荐回答(2个)
回答1:


/**
 * 2015年12月9日下午9:01:18
 * 
 * @author hp TODO 计算两个日期之间的天数
 *
 */
public class MyCalender {
    /**
     * 判断该年是不是闰年
     * 
     * @param year
     *            年份
     * @return 是则返回true,否则返回false
     */
    public boolean isLeapYear(int year) {
        return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
    }

    /**
     * 返回当月的天数
     * 
     * @param year
     *            年份
     * @param month
     *            月份
     * @return
     */
    public int getDayOfMonth(int year, int month) {
        int[] day = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

        if (isLeapYear(year) && 2 == month) {// 闰年且为2月时
            return day[month] + 1;
        }
        return day[month];
    }

    /**
     * 计算两个日期之间的天数(结束日期必须大于开始日期)
     * 
     * @param startYear
     *            开始年份
     * @param startMonth
     *            开始月份
     * @param startDay
     *            开始日
     * @param endYear
     *            结束年份
     * @param endMonth
     *            结束月份
     * @param endDay
     *            结束日
     * @return
     */
    public long countDayBetweenTowDate(int startYear, int startMonth, int startDay, int endYear, int endMonth,
            int endDay) {
        long sum = 0;
        int startDate = 0;
        int endDate = 0;

        for (int year = startYear; year < endYear; year++) {
            sum += 365;
            if (isLeapYear(year)) {
                sum++;
            }
        }

        for (int month = 0; month < startMonth; month++) {
            startDate += getDayOfMonth(startYear, month);
        }
        startDate += startDay;

        for (int month = 0; month < endMonth; month++) {
            endDate += getDayOfMonth(endYear, month);
        }
        endDate += endDay;

        sum = sum + endDate - startDate;

        return sum;
    }

    public static void main(String[] args) {

        MyCalender calender = new MyCalender();

        int startYear = 1990;
        int startMonth = 1;
        int startDay = 1;

        int endYear = 1990;
        int endMonth = 12;
        int endDay = 31;

        // 这里您可以使用Scanner 进行控制台输进

        System.out.println(calender.countDayBetweenTowDate(startYear, startMonth, startDay, endYear, endMonth, endDay));

    }

}

回答2:

简单的。