验证问题与日期计划

时间:2013-10-02 19:51:11

标签: java validation arguments

我必须验证日期,例如,如果我输入31/2/2013,它应该给出错误,因为二月不包含31天,但我坚持如何实现这一点,我试图使用切换声明,但仍然是徒劳的。帮助将非常感激。

public class Date
{
private int PDay;
private int PMonth;
private int PYear;

public Date(int day,int month,int year)
{
    setDay(day);
    setMonth(month);
    setYear(year);
}

public Date(int month,int year)
{
    this(1,month,year);
}

public Date(int year)
{
    this(1,1,year);
}

public void setDay(int day)
{
    PDay=day;
}

public int getDay()
{
    return PDay;
}

public void setMonth(int month)
{
    if(month>=1 && month<=12)
        PMonth=month;
    else
        System.out.println("Month Invalid-Must be Between 1 & 12");
}

public int getMonth()
{
    return PMonth;
}

public void setYear(int year)
{
    if(year>=1950 && year<=2049)
        PYear=year;
    else
        System.out.println("Year Invalid-Must be Between 1950 & 2049");
}

public int getYear()
{
    return PYear;
}

public String toString()
{
    return PDay+"/"+PMonth+"/"+PYear;
}
}

P.S。它不是家庭作业:P /&gt;

测试计划是:

public class DateTest
{
    public static void main(String[] args)
{
    Date newDate = new Date(7,14,2012);
    Date newDate1 = new Date(2152);
    System.out.println(newDate);
    System.out.println(newDate1);
}
}

2 个答案:

答案 0 :(得分:1)

在构造函数中,将之后的日期设置为年份和月份:

public Date(int day, int month, int year) {
    setYear(year);
    setMonth(month);
    setDay(day);
}

在方法setDay()中添加验证逻辑:

public void setDay(int day) {
    if (pMonth == 1 && (day < 1 || day > 31)) { 
        // throw exception or handle error
        throw new IllegalArgumentException("invalid number of days");
    } else if (pMonth == 2 && (day < 1 || day > 28)) {
        // same thing
    }

    // ... rest of validations

    PDay = day;

}

如果您想要更加严格,可以使用年份来确定2月份是28天还是29天。

答案 1 :(得分:0)

编辑:只要有适合您需求的现有框架,就不要自己实施日期处理。

但要注意一些现有框架的缺陷:(编辑结束)

请勿使用java.util.Date进行此类检查。几乎所有Date的方法都是错误的并且已经被声明为已弃用。那些setter和getter已在java.util.Calendar类中重新实现。但由于它们在某些情况下仍然存在问题,因此最好的选择是使用Java 8的新Date Time API(如果这是一个选项)或使用“第三方”Jodatime库来正确处理日期。

如果您只想对输入进行一些检查,那么您可以使用java.text.SimpleDateFormat来处理解析和检查。