2

我在用着

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

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

例如,如果inputString是 40/02/2013,我会得到一个错误,而不是 parse 方法返回日期 2013 年 3 月 12 日(2013 年 3 月 12 日)。我在错什么?

4

1 回答 1

8

设置宽大处理位

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 类有疑问时,阅读类文档应该是您的第一步。我不知道你的问题的答案,我只是用谷歌搜索了这个课程,点击了解析方法链接并注意到了See Also部分。您应该始终先搜索,并在问题中提及您的发现
  2. 宽大的日期在绕过审查激发孩子的想象力方面有着令人尊敬的历史。
于 2013-02-25T10:37:06.903 回答