SimpleDateFormat的和解析:解析不会失败与错误的输入字符串日期(SimpleDateF

2019-07-20 11:44发布

我正在使用

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

其中inputString是在一个字符串dd/MM/yyyy格式。

如果inputString是,例如,40/02/2013,我会以获得误差,而不是解析方法返回日期2013年3月12日(2013年12月3日)。 我正在wronging?

Answer 1:

设置宽大位 :

public void setLenient(boolean lenient)

指定日期/时间分析是否是宽松的。 随着宽松的解析,解析器可以使用启发式解释不精确匹配此对象的格式输入。 凭借严格的解析,必须输入此对象的格式相匹配。

下面的代码:

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();
        }

    }
}

得到:

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)

笔记

  1. 当有关Java类疑问,阅读类的文档应该是你的第一步。 我不知道回答你的问题,我只是谷歌搜索类,点击解析方法链接,并指出, 另请参见部分。 你应该总是先搜索,并注明您的发现的问题
  2. 从宽日期有一个体面的历史绕过审查和激发孩子们的想象力 。


文章来源: SimpleDateFormat and parsing: parse doesn't fail with wrong input string date