天天看点

java中日期计算2月份_计算两日期间2月29日总数的Java程序

事先声明,本人仅仅是个计算机领域的新手,不久前开始学习Java。后来我接到了一份关于计算两日期间2月29日总数的编程作业,仓促之中我便写下了这个程序。由于之前可以说毫无编程经验,Java也仅仅是只学了一小部分。所以目前该程序尚未解决输入问题。

我解决这个问题的思路是:

编写一个方法(leapYear)用于判断某一年份是否为闰年;

编写另一个方法(dateExist)用于判断某一时期是否真实存在,在这方法中会引用到上个方法;

最后编写main方法,引用方法(dateExist)分别判断起始日期和终止日期是否真实存在;

倘若均真实存在。假如起始和终止日期不在同一年,这对起始和终止年份之间的年份枚举,把闰年总数计算出来,在这过程中引用方法(leapYear);不真实存在则显示提示。

最后判断起始和终止年份是否为闰年及起始/终止月份是否小于/大于2月,并把符合条件的2月29日算出,在这过程中也须引用方法leapYear。

以下是我的代码:

public class LeapYearComputing

{

//判断某一年份是否为闰年。

public static boolean leapYear(int y) {

boolean leapYear;

if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {

leapYear = true;

}

else {

leapYear = false;

};

return leapYear;

};

//判断某一日期是否存在。

public static boolean dateExist(int year ,int month ,int date) {

boolean dateExist;

if (year > 0 ) {

if (month > 0 && month < 13) {

if (date > 0 && date < 32) {

switch(month) {

case 2:

if (leapYear(year)) {

if (date < 30) {

dateExist = true;

}

else {

dateExist = false;

};

}

else if (date < 29) {

dateExist = true;

}

else {

dateExist = false;

};

break;

case 4:

case 6:

case 9:

case 11:

if (date < 31) {

dateExist = true;

}

else {

dateExist = false;

};

break;

default:

if (date < 32) {

dateExist = true;

}

else {

dateExist = false;

};

};

}

else {

dateExist = false;

};

}

else {

dateExist = false;

};

}

else {

dateExist = false;

};

return dateExist;

};

//计算两日期间2月29日数目。

public static void main(String[] args) {

int year1 = 9011;           //请输入起始年份。

int month1 = 12;             //请输入起始月份。

int date1 = 29;             //请输入起始日期。

int year2 = 12012;           //起输入终止年份。

int month2 = 2;             //请输入终止月份。

int date2 = 29;             //请输入终止日期。

int result = 0;

int Year = year1 + 1;

if (dateExist(year1,month1,date1)) {

if (dateExist(year2,month2,date2)) {

while (Year < year2 ) {

if (leapYear(Year)) {

result ++;

};

Year ++;

};

if (year1 == year2 && leapYear(year1)) {

result --;

};

if (month1 <= 2 && leapYear(year1)) {

result ++;

};

if (month2 > 2 ||  (month2 == 2 && date2 == 29) && leapYear(year2)) {

result ++;

}

System.out.println("两日期之间的2月29日有" + result + "个。");

}

else {

System.out.println("终止日期并不真实存在!");

};

}

else {

System.out.println("起始日期并不真实存在!");

};

};

}

PS:本程序不考虑公元前年份。我原本考虑公元前的情况,但虑及公元前并无公元纪年,而且关于闰年的定义极有可能不在适用,便把年份限定在公元后。

当起始和终止年份在同一年,且这一年是闰年的情况下,应将闰年数减一。

各位若发现该程序的不足之处或有更好的算法,还望多多指教。