【问题标题】:Date with SimpleDateFormat in JavaJava 中使用 SimpleDateFormat 的日期
【发布时间】:2025-12-13 04:50:01
【问题描述】:

以下代码尝试使用给定格式解析日期31-Feb-2013 13:02:23

DateFormat dateFormat=new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");
System.out.println(dateFormat.parse("31-Feb-2013 13:02:23"));

它返回Sun Mar 03 13:02:23 IST 2013

我需要使这些日期无效,表明 无效日期。这个(等等)日期不应该被解析(或者应该以任何其他方式无效)。这可能吗?

【问题讨论】:

    标签: java validation date simpledateformat


    【解决方案1】:

    使用DateFormat.setLenient(boolean) 方法和false 参数:

    DateFormat dateFormat=new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");
    dateFormat.setLenient(false);
    System.out.println(dateFormat.parse("31-Feb-2013 13:02:23"));
    

    【讨论】:

      【解决方案2】:

      Java 日期计算是宽松的。通过宽松的解析,解析器可能会使用启发式方法来解释不精确匹配此对象格式的输入。

      您必须将 false 传递给 lenient 以转换为 严格模式 的日期格式。使用严格解析,输入必须匹配此对象的格式。

      DateFormat dateFormat=new SimpleDateFormat("...");
      dateFormat.setLenient(false); // turn on Strict mode
      dateFormat.parse("31-Feb-2013 13:02:23");// throws java.text.ParseException 
      

      【讨论】:

      • 由于两个答案都很好,我接受了最旧的一个。请不要介意。