所以,这就是我在Java中用作isDate
的东西。
public class Common {
public static final String DATE_PATTERN = "yyyy-MM-dd";
public static boolean isDate(String text) {
return isDate(text, DATE_PATTERN);
}
public static boolean isDate(String text, String date_pattern) {
String newDate = text.replace("T00:00:00", "");
SimpleDateFormat formatter = new SimpleDateFormat(date_pattern);
ParsePosition position = new ParsePosition(0);
formatter.parse(newDate, position);
formatter.setLenient(false);
if (position.getIndex() != newDate.length()) {
return false;
} else {
return true;
}
}
}
这是我的测试代码:
String fromDate = "";
if (Common.isDate(fromDate)) {
System.out.println("WHAT??????");
}
我每次都会看到WHAT??????
。我在这里缺少什么?
感谢。
答案 0 :(得分:6)
这是因为你的逻辑不正确。 newDate=""
,即newDate.length()==0
。和position.getIndex()==0
一样,因为错误发生在字符串的最开头。您可以测试position.getErrorIndex()>=0
。
答案 1 :(得分:2)
检查成功解析的正确方法是查看parse
方法是否返回日期或null
。试试这个:
public static boolean isDate(String text, String date_pattern) {
String newDate = text.replace("T00:00:00", "");
SimpleDateFormat formatter = new SimpleDateFormat(date_pattern);
ParsePosition position = new ParsePosition(0);
formatter.setLenient(false);
return formatter.parse(newDate, position) != null;
}
答案 2 :(得分:0)
不要重新发明轮子......使用Joda Time;)
DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd");
try {
DateTime dt = fmt.parseDateTime("blub235asde");
} catch (IllegalArgumentException e) {
e.printStackTrace();
return false;
}
return true;
输出:
java.lang.IllegalArgumentException: Invalid format: "blub235asde"
at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:673)
at Test.main(Test.java:21)