import java.util.Scanner;
/**
* 给定一个日期文本,判断这一天是这一年的第几天
*/
public class queryDay {
public static void main(String[] args) {
String flag ="t";
Scanner scanner = new Scanner(System.in);
while(flag.equals("t")||flag.equals("T")){
//输入一个文本日期
System.out.print("请输入一个日期(格式为YYYY-MM-DD):");
String textDate = scanner.nextLine();
System.out.printf("输入的文本日期为:%s", textDate);
//校验输入日期文本是否符合要求
try {
String[] arrayDate = textDate.split("-");
int year = Integer.parseInt(arrayDate[0]);
int month = Integer.parseInt(arrayDate[1]);
int day = Integer.parseInt(arrayDate[2]);
int february = 28;
//判断输入年份是否为有效年
if (year > 0 && year <= 9999) {
System.out.println("输入年份有效!");
//年份有效判断是否为闰年
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
february = 29;
System.out.println(year + "是闰年,2月有29天");
}
} else {
System.out.println("输入年份有误,请重新输入!");
continue;
}
//判断输入月份是否有效
if(month>=1&&month<=12){
System.out.println("输入月份有效!");
}else{
System.out.println("输入月份有误,请重新输入!");
continue;
}
//判断每月天数输入是否正确
if (day >= 1) {
if ((month == 2 && day <= february) ||
((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) && day <= 31) ||
((month == 4 || month == 6 || month == 9 || month == 11) && day <= 30)) {
System.out.println("输入日期有效!");
} else {
System.out.println("输入日期有误,请重新输入!");
continue;
}
} else {
System.out.println("输入日期有误,请重新输入!");
continue;
}
//查询输入的日期为本年的第X天
int sumDay = queryForDay(year,month,day,february);
System.out.printf("输入日期为%d的第%d天\n",year,sumDay);
System.out.print("是否继续计算日期天数(继续请输入t/T,中断执行请输入除t/T外的其他字符):");
flag = scanner.nextLine();
} catch (Exception e) {
System.out.println("输入不合法!请重新输入!!!");
}
}
}
/**
* 查询输入的日期为本年的第X天
* @param year
* @param month
* @param day
* @param february
* @return
*/
public static int queryForDay(int year, int month, int day,int february){
int sumDay=0;
switch (month){
case 1:
sumDay = day;
return sumDay;
case 2:
sumDay = 31+day;
return sumDay;
case 3:
sumDay = 31+february+day;
return sumDay;
case 4:
sumDay = 31*2+february+day;
return sumDay;
case 5:
sumDay = 31*2+february+30+day;
return sumDay;
case 6:
sumDay = 31*3+february+30+day;
return sumDay;
case 7:
sumDay = 31*3+february+30*2+day;
return sumDay;
case 8:
sumDay = 31*4+february+30*2+day;
return sumDay;
case 9:
sumDay = 31*5+february+30*2+day;
return sumDay;
case 10:
sumDay = 31*5+february+30*3+day;
return sumDay;
case 11:
sumDay = 31*6+february+30*3+day;
return sumDay;
case 12:
sumDay = 31*6+february+30*4+day;
return sumDay;
default:
System.out.println("月份输入不正确!");
}
return sumDay;
}
}