日期的逻辑判断(不用Date和 Calendar)

小程序:判断输入日期的逻辑是否有错误

/**
 * Created by Liu S.J on 4/6/2016.
 * Date类三个属性
 */
import java.util.Scanner;
public class Date {
    private int Year = 2000;
    private int Month = 1;
    private int Day;
	int leap;   //设置一个闰年变量,闰年为1,平年为0
    public Date(){

    }
    public void setYear(int year) {
        this.Year = year;
    }
    public int getYear() {
        return Year;
    }
    public void setMonth(int month) {
        this.Month = month;
    }
    public int getMonth() {
        return Month;
    }
    public void setDay(int day) {
        this.Day = day;
    }
    public int getDay() {
        return Day;
    }
    public static void main(String args[]) {
        Date date = new Date();
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个日期:(年月日请隔开)");
        date.setYear(sc.nextInt());
        date.setMonth(sc.nextInt());
        date.setDay(sc.nextInt());
        //判断月份是否错误
        if (date.getMonth()> 12||date.getMonth()<=0) {
            System.out.println("月输入错误!请重新输入月份");
            date.setMonth(sc.nextInt());
        }
        /*判断是否是闰年,为leap赋相应的值 
          闰年判断条件:(date.getYear()%4==0&&date.getYear()%100!=0)||date.getYear()%400==0)
        */
    	if((date.getYear()%4==0&&date.getYear()%100!=0)||date.getYear()%400==0)
    		date.leap = 1;
        else
    	   date.leap = 0;
        //判断日的输入是否错误
         if(date.getMonth() == 2){            //第一种情况:2月份只有28或29天
        	     if(date.leap==1&&date.getDay()>29){
        	      		System.out.println("闰年二月只有29天!请重新输入日");
        	      		date.setDay(sc.nextInt());
                 }
                 else if(date.leap==0&&date.getDay()>28){
        	        	System.out.println("平年二月只有28天!请重新输入日");
        			    date.setDay(sc.nextInt());
        	        }
        		}
        else  if(date.getMonth() ==4||date.getMonth() ==6||date.getMonth() ==9||date.getMonth() ==11){   //情况二、4,6,9,11月30天
        	  if (date.getDay()> 30) {
        		  System.out.println("日输入错误(30天)!请重新输入日");
        		  date.setDay(sc.nextInt());
            }
        } else {           //  情况三、其余月份31天
        	  if (date.getDay()> 31) {
        		  System.out.println("日输入错误(31天)!请重新输入日");
                  date.setDay(sc.nextInt());
                }
        }
           System.out.println("日期输出为:"+date.getYear()+"年"+date.getMonth()+"月"+date.getDay()+"日");
    }
}

 
  

闰年的判断为:if(year%4==0&&year%100!=0)||year%400==0),年份后两位是00的,

一般情况下,能被4除尽的是闰年,但是在整百年(如1800年、1900年、2000年)时,只有能被400除尽的才是闰年。因此1600年、2000年是闰年,1700年、1800年、1900年不是闰年。

你可能感兴趣的:(javaSE,小程序)