java代码实现题目给定一个日期,判定是否为合法日期。如果合法,判断该年是否闰年,该日期是当年第几天、当月第几天、当周第几天、。 给定起始日期与结束日期,判定日期是否合法且结束日期是否早于起始日期。如果均合法,输出结束日期与起始日期之间的相差的天数、月数、念书。 输入格式: 第一行输入一个日期字符串,格式为"YYYY-MM-dd" 第二行输入两个日期字符串,中间使用空格隔开。分别代表开始日期与结束日期。 输出格式: 如果第一行日期字符串非法,输出自定义的错误信息。 如果第一行日期有效,输出相关信息,如果是闰年要输出是闰年。 如果第二行两个日期,只要有一个无效。就输出相关错误信息。 如果第二行两个日期有效且结束日期不早于开始日期,输出相关信息
时间: 2023-05-27 18:01:01 浏览: 306
Java代码如下:
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
public class Main {
public static void main(String[] args) {
String dateStr = "2021-01-01"; // 第一行输入的日期字符串
String startDateStr = "2020-12-31"; // 第二行输入的开始日期字符串
String endDateStr = "2022-01-01"; // 第二行输入的结束日期字符串
// 判断第一行输入的日期字符串是否合法
boolean isValidDate = isValidDate(dateStr);
if (!isValidDate) {
System.out.println("第一行输入的日期字符串不合法");
return;
}
// 解析第一行输入的日期字符串
LocalDate date = LocalDate.parse(dateStr);
// 判断是否为闰年
if (date.isLeapYear()) {
System.out.println(date.getYear() + "年是闰年");
} else {
System.out.println(date.getYear() + "年不是闰年");
}
// 计算该日期是当年第几天
int dayOfYear = date.getDayOfYear();
System.out.println("该日期是当年的第" + dayOfYear + "天");
// 计算该日期是当月第几天
int dayOfMonth = date.getDayOfMonth();
System.out.println("该日期是当月的第" + dayOfMonth + "天");
// 计算该日期是当周第几天
int dayOfWeek = date.getDayOfWeek().getValue();
System.out.println("该日期是当周的第" + dayOfWeek + "天");
// 解析第二行输入的开始日期与结束日期
LocalDate startDate = LocalDate.parse(startDateStr);
LocalDate endDate = LocalDate.parse(endDateStr);
// 判断开始日期与结束日期是否合法
boolean isStartDateValid = isValidDate(startDateStr);
boolean isEndDateValid = isValidDate(endDateStr);
if (!isStartDateValid || !isEndDateValid) {
System.out.println("第二行输入的日期字符串不合法");
return;
}
// 判断结束日期是否早于开始日期
if (endDate.isBefore(startDate)) {
System.out.println("结束日期早于开始日期");
return;
}
// 计算相差的天数、月数、年数
long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);
long monthsBetween = ChronoUnit.MONTHS.between(startDate.withDayOfMonth(1), endDate.withDayOfMonth(1));
long yearsBetween = ChronoUnit.YEARS.between(startDate.withDayOfYear(1), endDate.withDayOfYear(1));
System.out.println("相差的天数是:" + daysBetween);
System.out.println("相差的月数是:" + monthsBetween);
System.out.println("相差的年数是:" + yearsBetween);
}
/**
* 判断日期字符串是否合法
*
* @param dateStr 日期字符串,格式为"YYYY-MM-dd"
* @return 如果合法,返回 true;否则返回 false
*/
private static boolean isValidDate(String dateStr) {
try {
LocalDate.parse(dateStr);
return true;
} catch (Exception e) {
return false;
}
}
}
代码中使用了 Java 8 中的 LocalDate 类来处理日期,其中:
- isValidDate 方法用于判断日期字符串是否合法,调用 LocalDate.parse 方法进行解析,如果解析失败则抛出异常,表示日期字符串不合法。
- 解析第一行输入的日期字符串,使用 LocalDate.parse 方法进行解析,并用 isLeapYear 方法判断该年是否为闰年。使用 getDayOfYear、getDayOfMonth 和 getDayOfWeek 方法计算该日期是当年第几天、当月第几天和当周第几天。
- 解析第二行输入的开始日期和结束日期,同样使用 LocalDate.parse 方法进行解析。判断开始日期和结束日期是否合法,需要分别调用 isValidDate 方法判断。判断结束日期是否早于开始日期,使用 isBefore 方法。
- 计算相差的天数、月数、年数,使用 ChronoUnit 类的静态方法 between 进行计算,分别计算天数、月数、年数。需要注意的是,计算月数和年数时需要使用 withDayOfMonth 和 withDayOfYear 方法,将日期调整到月初和年初,避免出现跨月或跨年的情况。
阅读全文