输入日期判断是这一年的第几天(JAVA)

第一次写的时候是直接键盘录入三个整型数依次是年、月、日,然后直接计算是第几日,但是这样会导致实现判断输入数据是否合法有些繁琐。所以第二次直接使用了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);
    }

}

你可能感兴趣的:(输入日期判断是这一年的第几天(JAVA))