题目描述
输入年月日,显示该天是这一年中的第几天,要求对输入的日期进行合理性检查。
核心思想
年月日限定条件,月份1-12,日期各个月份不一样。
2月份日期分平年和闰年
日期在本年中的第几天=本月之前的每月满天数+本月的天数
代码实现
import java.util.Scanner;
/**
* 输入年月日,显示该天是这一年中的第几天,要求对输入的日期进行合理性检查。
*
* @author jjking
*
* 创建时间:2020年4月7日
*/
public class Test02_7 {
public static void main(String[] args) {
int dayOfYear = 0;
// 用户输入
Scanner input = new Scanner(System.in);
System.out.println("请输入一个时间日期(格式xxxx-xx-xx):");
String date = input.next();
System.out.println(date);
// 日期合理性检查
String[] split = date.split("-");
int year = Integer.parseInt(split[0]);
int month = Integer.parseInt(split[1]);
int day = Integer.parseInt(split[2]);
System.out.println(year + "" + month + "" + day);
if (year < 0 || year > 10000) {
System.out.println("年份不合理!");
return;
}
if (month < 1 || month > 12) {
System.out.println("月份不合理!");
return;
}
// 1、3、5、7、8、10、12月份
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
if (day > 0 && day < 32) {
// 日期计算
for (int i = 0; i < month; i++) {
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
dayOfYear += 31;
break;
case 4:
case 6:
case 9:
case 11:
dayOfYear += 30;
break;
case 2:
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
dayOfYear += 29;
}else {
dayOfYear += 28;
}
default:
break;
}
}
dayOfYear += day;
}
// 4、6、9、11月份
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
if (day > 0 && day < 31) {
// 日期计算
for (int i = 0; i < month; i++) {
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
dayOfYear += 31;
break;
case 4:
case 6:
case 9:
case 11:
dayOfYear += 30;
break;
case 2:
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
dayOfYear += 29;
}else {
dayOfYear += 28;
}
default:
break;
}
}
dayOfYear += day;
}
// 2月份
} else {
// 闰年
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
if (day > 0 && day < 30) {
// 日期计算
for (int i = 0; i < month; i++) {
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
dayOfYear += 31;
break;
case 4:
case 6:
case 9:
case 11:
dayOfYear += 30;
break;
case 2:
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
dayOfYear += 29;
}else {
dayOfYear += 28;
}
default:
break;
}
}
dayOfYear += day;
}
// 平年
} else {
if (day > 0 && day < 29) {
// 日期计算
for (int i = 0; i < month; i++) {
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
dayOfYear += 31;
break;
case 4:
case 6:
case 9:
case 11:
dayOfYear += 30;
break;
case 2:
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
dayOfYear += 29;
}else {
dayOfYear += 28;
}
default:
break;
}
}
dayOfYear += day;
}
}
}
System.out.println(date + "是" + year + "年中的第" + dayOfYear +"天");
}
}
代码优化后
import java.util.Scanner;
/**
* 输入年月日,显示该天是这一年中的第几天,要求对输入的日期进行合理性检查。
*
* @author jjking
*
* 创建时间:2020年4月7日
*/
public class Test02_7 {
static int dayOfYear = 0;
public static void main(String[] args) {
// 用户输入
Scanner input = new Scanner(System.in);
System.out.println("请输入一个时间日期(格式xxxx-xx-xx):");
String date = input.next();
System.out.println(date);
// 日期合理性检查
String[] split = date.split("-");
int year = Integer.parseInt(split[0]);
int month = Integer.parseInt(split[1]);
int day = Integer.parseInt(split[2]);
System.out.println(year + "" + month + "" + day);
if (year < 0 || year > 10000) {
System.out.println("年份不合理!");
return;
}
if (month < 1 || month > 12) {
System.out.println("月份不合理!");
return;
}
// 1、3、5、7、8、10、12月份
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
if (day > 0 && day < 32) {
addDays(year, month);
dayOfYear += day;
}
// 4、6、9、11月份
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
if (day > 0 && day < 31) {
// 日期计算
addDays(year, month);
dayOfYear += day;
}
// 2月份
} else {
// 闰年
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
if (day > 0 && day < 30) {
// 日期计算
addDays(year, month);
dayOfYear += day;
}
// 平年
} else {
if (day > 0 && day < 29) {
// 日期计算
addDays(year, month);
dayOfYear += day;
}
}
}
System.out.println(date + "是" + year + "年中的第" + dayOfYear + "天");
}
public static int addDays(int year, int month) {
// 日期计算
for (int i = 0; i < month; i++) {
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
dayOfYear += 31;
break;
case 4:
case 6:
case 9:
case 11:
dayOfYear += 30;
break;
case 2:
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
dayOfYear += 29;
} else {
dayOfYear += 28;
}
default:
break;
}
}
return dayOfYear;
}
}
运行结果展示
本节完!
更多信息交流请加QQ:1406073270