ava要求输入两个日期yyyyMMdd 1.格式要求大于19700101的8位数,且相差大于4年,年月日要求合法 2.需要代码校验,错误的输入需要提示错误所在,并能够再次输入,输入0退出程序) 3.合法的两个输入后,输出两个日期之间相差的天数
时间: 2023-12-06 12:03:22 浏览: 82
Java编程输入两个年月日,(1)判断两个日期是否相同,并且将相差的天数显示出来;(2)将日期后推或前推N天,并将该日期输出。
4星 · 用户满意度95%
下面是一个实现你要求的Java程序:
```java
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Scanner;
public class DateDifference {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
LocalDate date1 = null;
LocalDate date2 = null;
boolean validDate1 = false;
boolean validDate2 = false;
while (true) {
System.out.println("请输入第一个日期(yyyyMMdd),输入0退出程序:");
String input1 = scanner.nextLine();
if (input1.equals("0")) {
System.exit(0);
}
try {
date1 = LocalDate.parse(input1, formatter);
if (date1.getYear() < 1970 || !isValidDate(date1)) {
throw new IllegalArgumentException("日期不合法!");
}
validDate1 = true;
} catch (Exception e) {
System.out.println("第一个日期输入有误!" + e.getMessage());
}
System.out.println("请输入第二个日期(yyyyMMdd),输入0退出程序:");
String input2 = scanner.nextLine();
if (input2.equals("0")) {
System.exit(0);
}
try {
date2 = LocalDate.parse(input2, formatter);
if (date2.getYear() < 1970 || !isValidDate(date2)) {
throw new IllegalArgumentException("日期不合法!");
}
validDate2 = true;
} catch (Exception e) {
System.out.println("第二个日期输入有误!" + e.getMessage());
}
if (validDate1 && validDate2) {
long days = ChronoUnit.DAYS.between(date1, date2);
System.out.println("两个日期相差 " + days + " 天。");
break;
}
}
}
private static boolean isValidDate(LocalDate date) {
int year = date.getYear();
int month = date.getMonthValue();
int day = date.getDayOfMonth();
if (month == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
return day <= 29;
} else {
return day <= 28;
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
return day <= 30;
} else {
return day <= 31;
}
}
}
```
程序使用了 `Scanner` 类来读取用户输入,使用了 `DateTimeFormatter` 类来解析日期字符串,使用了 `LocalDate` 类来处理日期。程序的主体部分包含一个无限循环,直到用户输入的两个日期都合法才会退出。
`isValidDate()` 方法用于判断日期是否合法,该方法会检查日期的年月日是否在合法范围内,并且会判断月份和日期是否匹配。如果日期不合法,会抛出一个 `IllegalArgumentException` 异常,并提示错误原因。
如果输入的两个日期都合法,程序会使用 `ChronoUnit.DAYS.between()` 方法计算两个日期之间相差的天数,并输出到控制台中。
下面是一个示例运行结果:
```
请输入第一个日期(yyyyMMdd),输入0退出程序:
20210901
请输入第二个日期(yyyyMMdd),输入0退出程序:
20220901
两个日期相差 365 天。
```
阅读全文