首页 > 解决方案 > 有没有一种有效的方法来检查字符串是否代表日期?

问题描述

我收到了一个特定格式的 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 个字段来表示时间等。所以我的代码将充满尝试捕获。有没有更有效的方法来解决这个问题?

标签: javavalidationdate-parsing

解决方案


有问题的代码没有任何问题。它清晰易读,没有明显的性能问题(DateTimeFormatter如果你愿意,你可以缓存,但这不会有什么不同)。正如您所提到的,异常也不会对性能造成重大影响。

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

这是“我听说/我在假设下”的情况,虽然过去有些事情是一个真正的问题(例如同步缓慢),但通常它们是基于 10 多年前过时的 Java 版本一个问题以错误的方式理解(例如异常/控制流)。


推荐阅读