有没有一种有效的方法来检查字符串是否代表日期?

时间:2019-11-07 13:19:24

标签: java validation date-parsing

我得到了一些特定格式的txt。 该格式应以 dd / MM / uuuu 开头。 但是,我想检查一下是否确实是这种特定格式,否则我的代码会中断。

现在,我的想法是检查特定的10个第一个字符(带有分隔符)是否可以定义LocalDate对象。所以我想出了这个:

public boolean isDate(String date) {

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/uuuu");
    LocalDate ld = null;
    try {
        ld = LocalDate.parse(date, formatter);
        System.out.println(ld);
    } catch (DateTimeParseException e) {
        System.out.println("Date " + date + " is not a date.");
        return false;

    }

    return true;
}

但是,这不是不是的最佳做法,因为我控制着异常的程序流。另外我必须检查另外8个字段来表示时间等。因此我的代码将充满尝试捕获的内容。有没有更有效的方法来解决这个问题?

2 个答案:

答案 0 :(得分:4)

所讨论的代码没有错。它清晰易读,并且没有明显的性能问题(请确保您可以缓存DateTimeFormatter,但这不会有所不同)。异常也不会对性能造成重大影响,例如mentioned

这不是例外情况下的控制流情况。您唯一可以知道日期的方法就是解析它。如果不是,解析器将引发异常。没有LocalDate.tryParse(),但如果有,它看起来像问题中的代码。

这是“我听说/我处于假设之下”的情况,尽管过去有些事情是一个实际问题(例如slow synchronization),但通常它们基于旧版本的Java版本10年前以错误的方式理解了问题(例如,异常/控制流)。

答案 1 :(得分:0)

我曾经有一个非常有趣的任务-检查是否有任何字符串表示任何格式的日期。我想到了一个有趣的主意。简而言之,它是将要支持的所有日期格式的列表作为外部属性保存,然后针对每种格式逐一检查字符串。但是还有更多。例如格式的顺序很重要。我写了一篇关于这个问题的文章。这是它的链接:Java 8 Java. Time Package: Parsing Any String to Date