我必须验证日期,例如,如果我输入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);
}
}
答案 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
来处理解析和检查。