【面试题】给定一个日期文本,判断这一天是这一年的第几天

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;
    }
}

  

posted @ 2025-05-14 01:03  小墨儿  阅读(28)  评论(0)    收藏  举报