使用Java写出:设int year,month,day分别表示一个日期中的年月日,试编程求 a) 对于任意三个整数,判断其是否为一个合法的日期值。 b) 给定一个日期值,计算若干天后的日期值 c) 如果有两个日期值,计算他们相距的天数。
时间: 2023-06-03 09:02:55 浏览: 177
JAVA.rar_Java编程_Java_
a) 判断一个日期是否合法,需要根据月份和年份来判断该月有多少天。下面是一个示例代码:
```java
public boolean isDateValid(int year, int month, int day) {
if (year < 1 || month < 1 || month > 12 || day < 1) {
return false;
}
int daysInMonth;
switch (month) {
case 2:
daysInMonth = 28 + (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) ? 1 : 0);
break;
case 4:
case 6:
case 9:
case 11:
daysInMonth = 30;
break;
default:
daysInMonth = 31;
}
return day <= daysInMonth;
}
```
b) 给定一个日期和一个天数,需要计算若干天后的日期。我们可以先将日期转换为一个整数,表示从公元元年1月1日开始到那一天的天数,然后再加上指定的天数,最后转换返回新的日期。下面是一个示例代码:
```java
public int[] addDaysToDate(int year, int month, int day, int daysToAdd) {
int days = getDaysOfYear(year, month, day) + daysToAdd;
return getDateFromDays(days);
}
private int getDaysOfYear(int year, int month, int day) {
int totalDays = (year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400;
for (int i = 1; i < month; i++) {
totalDays += getDaysInMonth(year, i);
}
return totalDays + day - 1;
}
private int[] getDateFromDays(int days) {
int year = 1;
while (days > getDaysInYear(year)) {
days -= getDaysInYear(year);
year++;
}
int month = 1;
while (days > getDaysInMonth(year, month)) {
days -= getDaysInMonth(year, month);
month++;
}
int day = days + 1;
return new int[]{year, month, day};
}
private int getDaysInMonth(int year, int month) {
return month == 2 ? getDaysInFebruary(year) : (month == 4 || month == 6 || month == 9 || month == 11 ? 30 : 31);
}
private int getDaysInYear(int year) {
return getDaysInMonth(year, 1) + getDaysInMonth(year, 2) + getDaysInMonth(year, 3) + getDaysInMonth(year, 4)
+ getDaysInMonth(year, 5) + getDaysInMonth(year, 6) + getDaysInMonth(year, 7) + getDaysInMonth(year, 8)
+ getDaysInMonth(year, 9) + getDaysInMonth(year, 10) + getDaysInMonth(year, 11) + getDaysInMonth(year, 12);
}
private int getDaysInFebruary(int year) {
return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) ? 29 : 28;
}
```
c) 两个日期相距的天数可以通过把两个日期先转换为从公元元年1月1日开始的天数,然后相减来计算。下面是一个示例代码:
```java
public int daysBetweenDates(int year1, int month1, int day1, int year2, int month2, int day2) {
int days1 = getDaysOfYear(year1, month1, day1);
int days2 = getDaysOfYear(year2, month2, day2);
return Math.abs(days1 - days2);
}
```
阅读全文