第一次写的时候是直接键盘录入三个整型数依次是年、月、日,然后直接计算是第几日,但是这样会导致实现判断输入数据是否合法有些繁琐。所以第二次直接使用了Date类来存输入的日期,这样就很好判断输入的日期是否合法了,代码如下:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
public class Days {
// 判断日期是否合法
public static Date date() {
Scanner sc = new Scanner(System.in);
// 实例化Date对象指向空
Date date = null;
// 创建DateFormat对象,用于格式化日期字符串
DateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
boolean bb = true;
// 在循环里进行输入日期并判断输入是否合法,合法即跳出循环
while (bb) {
String str = sc.nextLine();
//如果输入的格式不对将不会被解析,执行cath回显输入错误,继续循环
try {
// 设置严格解析字串
sim.setLenient(false);
// 将输入的字串解析为Date对象
date = sim.parse(str);
bb = false;
} catch (Exception e) {
// TODO: handle exception
System.out.println("输入错误,请重新输入:");
}
}
return date;
}
// 计算天数
public static int Days(int year, int month, int day) {
// 定义累加器储存天数
int num = 0;
// 遍历月份,求每个月份的天数和
for (int i = 1; i < month; i++) {
switch (i) {
// 当月为大月时累加31
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
num += 31;
break;
// 当月为二月时闰年累加29,平年累加28
case 2:
num += (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? 29 : 28;
break;
default:
num += 30;
break;
}
}
// 加上日
num += day;
return num;
}
public static void main(String[] args) {
System.out.println("请输入日期:以 - 隔开(如0000-00-00)");
Date date = date();
// 使用抽象类Calendar来获取年月日
Calendar cal = Calendar.getInstance();
// 将日期设置给Calendat
cal.setTime(date);
int Days = Days(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DATE));
System.out.printf("该天为该年的第%d天", Days);
}
}