【问题标题】:SimpleDateFormat and parsing: parse doesn't fail with wrong input string dateSimpleDateFormat 和解析:解析不会因错误的输入字符串日期而失败
【发布时间】:2013-02-25 10:33:36
【问题描述】:

我正在使用

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,我会得到一个错误,而不是解析方法返回日期 2013 年 3 月 12 日(2013 年 3 月 12 日)。 我错在哪里?

【问题讨论】:

标签: java parsing date date-format simpledateformat


【解决方案1】:

设置Leniency bit:

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. 宽松的日期有 bypassing censorshipinspire children's' imagination 的可观历史。

【讨论】:

  • 非常感谢。这对我有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
相关资源
最近更新 更多