SimpleDateFormat和解析:解析不会因错误的输入字符串日期而失败

Sef*_*an2 2 java parsing date date-format simpledateformat

我正在使用

java.util.Date date;
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
try {
  date = sdf.parse(inputString);
} catch (ParseException e) {
  e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

其中inputStringdd/MM/yyyy格式的字符串.

如果inputString是,例如,2013年2月40日,我将获得一个错误,而不是解析方法返回日期2013年3月12日(2013年3月12日).我错了什么?

Ada*_*tan 8

设置宽松位:

public void setLenient(boolean lenient)
Run Code Online (Sandbox Code Playgroud)

指定日期/时间解析是否宽松.通过宽松的解析,解析器可以使用启发式来解释与该对象的格式不完全匹配的输入.通过严格的解析,输入必须与此对象的格式匹配.

以下代码:

import java.text.ParseException;
import java.text.SimpleDateFormat;

public class Tester {
    public static void main(String[] argv) {
        java.util.Date date;
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

        // Lenient
        try {
            date = sdf.parse("40/02/2013");
            System.out.println("Lenient date is :                  "+date);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        // Rigorous
        sdf.setLenient(false);

        try {
            date = sdf.parse("40/02/2013");
            System.out.println("Rigorous date (won't be printed!): "+date);
        } catch (ParseException e) {
            e.printStackTrace();
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

得到:

Lenient date is :                  Tue Mar 12 00:00:00 IST 2013
java.text.ParseException: Unparseable date: "40/02/2013"
    at java.text.DateFormat.parse(DateFormat.java:357)
Run Code Online (Sandbox Code Playgroud)

笔记

  1. 如果对Java类有疑问,阅读类文档应该是您的第一步.我不知道你的问题的答案,我只是用Google搜索了这个类,点击了解析方法链接并注意到了See Also部分.您应该首先搜索,并在问题中提及您的发现
  2. 宽容的约会有一个令人尊敬的历史绕过审查制度,激发孩子们的想象力.