java - 如何找出 SimpleDateFormat 中解析异常的实际原因?

标签 java simpledateformat

我有一个字符串形式的日期,我正在使用 SimpleDateFormat 验证它。

我有以下代码:

public boolean validateDate(String date) {

    SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");
    format.setLenient(false);
    try {
        Date dt = format.parse(date);
        logger.info("DT:\t" + dt.toString());
        String actDate = format.format(dt);
        logger.info("actDate:\t" + actDate);
        return actDate.equals(date);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return false;
}

现在,如果我发送一个不具有相同格式的值,我的格式化程序会期望它(例如29-03--2008)或具有< strong>不正确的闰年(例如29-02-2007),我得到一个java.text.ParseException: Unparseable date:

我希望能够知道到底是什么导致了问题,以便我可以将适当的消息发送回调用该方法的人。但是,当异常发生时,我无法知道到底是什么导致了它(是否是无效的格式或不正确的值或其他原因)。

我可以使用 RegEx 检查格式是否正确,但是 SimpleDateFormat 已经在内部处理该检查。所以我不想再做同样的事情了。

有什么方法可以让我知道是什么原因导致了异常吗?

最佳答案

我怀疑日期格式错误的方式几乎有无数种。总的来说,如果有足够的时间,我们的代码可能会经历所有这些。

您可能会发现最简单(最好?)的方法就是在错误消息中包含格式错误的日期,以便用户可以看到他们做错了什么。

编辑:请注意转义输入的值,以免在系统中引入 XSS 或类似漏洞。

关于java - 如何找出 SimpleDateFormat 中解析异常的实际原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44035779/

相关文章:

java - 使用空列表比在java中对列表进行空检查更昂贵吗?

java - 解决maven "Failed to resolve artifact"的非平凡依赖问题的解决方法

java - JPanel棋盘不显示

java - 如何进行JoinTable注解映射

java - SimpleDate 允许 null

java - 在 Java 7 中格式化 ISO 8601

java - 如何使用 AndroidX 为 Activity 创建选项菜单?

来自 String 的 Java Date 对象无法正常工作

java - 用于日期解析的 SimpleDateFormat 的替代方案

java - 2019-06-17T20 :27:23. 706000000Z 的日期格式是什么?