【发布时间】:2011-09-07 10:21:05
【问题描述】:
我需要将用户输入验证为有效日期。用户可以输入 dd/mm/yyyy 或 mm/yyyy(两者都有效)
为了验证我正在做的事情
try{
GregorianCalendar cal = new GregorianCalendar();
cal.setLenient(false);
String []userDate = uDate.split("/");
if(userDate.length == 3){
cal.set(Calendar.YEAR, Integer.parseInt(userDate[2]));
cal.set(Calendar.MONTH, Integer.parseInt(userDate[1]));
cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(userDate[0]));
cal.getTime();
}else if(userDate.length == 2){
cal.set(Calendar.YEAR, Integer.parseInt(userDate[1]));
cal.set(Calendar.MONTH, Integer.parseInt(userDate[0]));
cal.getTime();
}else{
// invalid date
}
}catch(Exception e){
//Invalid date
}
因为 GregorianCalendar 以 0、30/01/2009 或 12/2009 开始月份会出错。
任何建议如何解决这个问题。
【问题讨论】:
-
mm/yyyy的格式是否足以让您验证它? -
用户只能提供有效的月份和年份。不是一个月中的一天。所以 mm/yyyy 在这种情况下也是有效的。
-
如果这个应用程序。有一个 GUI,一个明显的答案是为用户提供一个日期选择器,该选择器只能选择有效日期(例如,没有周末或公共假期)。
-
cal.getTime()自己不做任何事情。您必须使用该表达式的结果。 -
仅供参考,麻烦的旧日期时间类,如
java.util.Date、java.util.Calendar和java.text.SimpleDateFormat现在是 legacy,被 Java 8 及更高版本中内置的 java.time 类所取代.见Tutorial by Oracle。