我得到了一些特定格式的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个字段来表示时间等。因此我的代码将充满尝试捕获的内容。有没有更有效的方法来解决这个问题?
答案 0 :(得分:4)
所讨论的代码没有错。它清晰易读,并且没有明显的性能问题(请确保您可以缓存DateTimeFormatter
,但这不会有所不同)。异常也不会对性能造成重大影响,例如mentioned。
这不是例外情况下的控制流情况。您唯一可以知道日期的方法就是解析它。如果不是,解析器将引发异常。没有LocalDate.tryParse()
,但如果有,它看起来像问题中的代码。
这是“我听说/我处于假设之下”的情况,尽管过去有些事情是一个实际问题(例如slow synchronization),但通常它们基于旧版本的Java版本10年前或以错误的方式理解了问题(例如,异常/控制流)。
答案 1 :(得分:0)
我曾经有一个非常有趣的任务-检查是否有任何字符串表示任何格式的日期。我想到了一个有趣的主意。简而言之,它是将要支持的所有日期格式的列表作为外部属性保存,然后针对每种格式逐一检查字符串。但是还有更多。例如格式的顺序很重要。我写了一篇关于这个问题的文章。这是它的链接:Java 8 Java. Time Package: Parsing Any String to Date