1

我必须验证日期,例如如果我输入 2013 年 2 月 31 日,它应该会给出错误,因为 2 月不包含 31 天,但我不知道如何实现,我尝试使用 switch 语句但是仍然徒劳。帮助将不胜感激。

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

PS它不是作业:P/>

测试程序是:

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

2 回答 2

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 天。

于 2013-10-02T19:55:23.253 回答
0

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

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

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

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

于 2013-10-02T20:06:02.830 回答