Java 检查日期解析是否正确

Java 检查日期解析是否正确,java,parsing,date,Java,Parsing,Date,我有这个代码来检查日期是否正确,但它不能检查所有的情况。例如,当text=“03/13/2009”作为此日期的格式“dd/MM/yyyy”不存在时,它将日期解析为03/01/2010。当我试图解析一个不正确的日期时,有没有办法改变这种行为并获得异常?进行此验证的最佳方法是什么 public static final String DATE_PATTERN = "dd/MM/yyyy"; public static boolean isDate(String text){ Simple

我有这个代码来检查日期是否正确,但它不能检查所有的情况。例如,当text=“03/13/2009”作为此日期的格式“dd/MM/yyyy”不存在时,它将日期解析为03/01/2010。当我试图解析一个不正确的日期时,有没有办法改变这种行为并获得异常?进行此验证的最佳方法是什么

public static final String DATE_PATTERN = "dd/MM/yyyy";

public static boolean isDate(String text){
     SimpleDateFormat formatter = new SimpleDateFormat(DATE_PATTERN);
     ParsePosition position = new ParsePosition(0);
     formatter.parse(text, position);
     if(position.getIndex() != text.length()){
         return false;
     }else{
        return true;
     }
}

谢谢。

在我看来,验证日期的最佳方法是使用正则表达式,您可以在这里找到许多用于验证日期的正则表达式,Java对正则表达式有很好的支持,这里的一些教程您需要在解析之前将lenient设置为false,否则解析器将“猜测”并尝试更正无效日期

formatter.setLenient(false);

查看

听起来您的部分或所有日期可能使用美国系统进行格式化:MM/dd/yyyy。如果是这样的话,您尝试做的事情仍然不会在所有情况下都起作用-有些日期是不明确的,因为它们在两个系统中都是有效的。您应该尝试确保使用相同的系统格式化日期,并且您知道该系统是什么。@Mark Byers我不认为该日期是用“MM/dd/yyyy”解析的,因为我正在打印解析的日期,对于text=“03/13/2009”,我得到的是日期Sun Jan 03 00:00:00 CET 2010。如果它用“MM/dd/yyyy”解析它,应该是2009年3月13日,而不是我得到的2010年1月3日。不,你应该使用更好的日期解析库。日期解析太复杂,无法自己进行。希望其他人知道一个好的…我不理解你,为什么你让事情变得更难?正则表达式是解析日期的好方法,您可以配置自己的模式。如果你不是在制作国际空间超级网站或应用程序,这是一个好的、可靠的选择。我写了我的意见!我同意这一点,用正则表达式很难做到。例如,2月29日每4年才存在一次,这些事情使得它太复杂,无法用正则表达式轻松处理。是的,它有点复杂,但我提供的站点上有许多完整的regexp,您不需要编写自己的regexp,或者您可以修改现有的regexp。