我有这个方法isFormatDateCorrect返回true,如果这个格式(NNNN@YYYY-MM-DD
)的日期是正确的,这个方法是正确的。
public boolean isFormatDateCorrect(String date) {
if (date == null || date.length() == 0) {
return false;
} //NNNN@YYYY-MM-DD
return date.matches("([0-9]{4})@([0-9]{4})-([0-9]{2})-([0-9]{2})");
}
这里我有isValidDate的其他方法,但是当我得到它时我有错误 进程数,年,月和日,我使用date.substring();但这种方法只返回假
public boolean isValidDate(String date) {
int process_number, day, month, year, max_days = 0;
if (date == null || date.length() == 0) {
return false;
}
//The correct format of date is NNNN@YYYY-MM-DD
if (isFormatDateCorrect(date) != true) {
return false;
}
//NNNN@YYYY-MM-DD(process_number@Year-month-day)
process_number = Integer.parseInt(date.substring(0, date.indexOf("@")));//get process number
year = Integer.parseInt(date.substring(date.indexOf("@") + 1, date.indexOf("-")));// get year
month = Integer.parseInt(date.substring(date.indexOf("-") + 1, date.lastIndexOf("-")));// get month
day = Integer.parseInt(date.substring(date.lastIndexOf("-") + 1, date.lenght()));//get day
if (month < 1 || month > 12) {
return false;
} else {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
max_days = 31;
break;
case 4:
case 6:
case 9:
case 11:
max_days = 30;
break;
case 2:
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
max_days = 29;
} else {
max_days = 28;
}
break;
}
if (day < 1 || day > max_days) {
return false;
}
}
return true;
}
例如,在Main中,当我测试时
String date = "1234@2014-12-25"
if(isValidDate(date) != true){
System.out.println("This date is invalid");
}else{
System.out.println("This date is valid");
}
,输出为:
System.out.println(“此日期无效”);
答案 0 :(得分:1)
public static boolean isValidDate(String inDate) {
SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-DD");
dateFormat.setLenient(false);
try {
dateFormat.parse(inDate.substring(0,( inDate.indexOf("@") - 1 ));
} catch (ParseException pe) {
return false;
}
return true;
}
使用这个simle技巧。
答案 1 :(得分:0)
实际上我运行了你的代码并为我打印“这个日期有效”。你确定你没有错过屏幕上的任何消息吗?我复制了你的代码并且必须修复拼写错误“lenght” - &gt; “长度”。也许您的代码没有成功重新编译,然后您运行了旧版本。
但是,如果您没有将这些内容用作代码kata,我建议您使用java.util.Date
,甚至更好java.util.Calendar
,或者更好地使用新的java.time
包,而不是重新发明轮子。
Java API提供了许多解析和计算日期和时间的方法。它支持区域设置,不同的日历,时区。如果一颗流星撞到一个略微不同的轨道上,改变一些大约几天或几年左右的时间(闰秒,闰年和东西),Java更新将修复你的代码 - 如果你使用了API。或者如果无神论者接管并将这一年改回原来的定义为13个月而不是12个(12个只是因为那些自大的罗马皇帝)。我的意思是,没有可能,但你永远不知道,为什么要通过重新发明轮子来重复这些努力。