有没有一种有效的方法来检查字符串是否代表日期?
Is there an efficient way to check if a string represents a date?
我收到了一份具有某种特定格式的 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 个字段来表示时间等。所以我的代码将充满尝试捕获。有没有更有效的方法来解决这个问题?
我曾经有一个非常有趣的任务 - 检查是否有任何字符串代表任何格式的日期。我想出了一个有趣的主意。简而言之,它是将您希望支持的所有日期格式的列表保存为外部 属性,然后根据每种格式一一检查您的字符串。但还有更多。例如,格式的顺序很重要。我写了一篇关于这个问题的文章。这是它的 link:Java 8 Java. Time Package: Parsing Any String to Date
有问题的代码没有问题。它清晰易读,没有明显的性能问题(如果需要,当然可以缓存 DateTimeFormatter
,但这不会有什么不同)。异常也不会对性能造成重大影响,因为你 mentioned.
这不是异常控制流的情况。您可以知道它是否是日期的唯一方法是解析它。如果不是,解析器将抛出异常。没有LocalDate.tryParse()
,但如果有,它看起来像问题中的代码。
这是 "I heard/I was under the assumption" 的情况,虽然有些事情在过去是一个真正的问题(例如 slow synchronization),但通常它们基于来自 Java 的过时版本10 多年前 或 以错误的方式理解问题(例如异常/控制流)。
我收到了一份具有某种特定格式的 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 个字段来表示时间等。所以我的代码将充满尝试捕获。有没有更有效的方法来解决这个问题?
我曾经有一个非常有趣的任务 - 检查是否有任何字符串代表任何格式的日期。我想出了一个有趣的主意。简而言之,它是将您希望支持的所有日期格式的列表保存为外部 属性,然后根据每种格式一一检查您的字符串。但还有更多。例如,格式的顺序很重要。我写了一篇关于这个问题的文章。这是它的 link:Java 8 Java. Time Package: Parsing Any String to Date
有问题的代码没有问题。它清晰易读,没有明显的性能问题(如果需要,当然可以缓存 DateTimeFormatter
,但这不会有什么不同)。异常也不会对性能造成重大影响,因为你 mentioned.
这不是异常控制流的情况。您可以知道它是否是日期的唯一方法是解析它。如果不是,解析器将抛出异常。没有LocalDate.tryParse()
,但如果有,它看起来像问题中的代码。
这是 "I heard/I was under the assumption" 的情况,虽然有些事情在过去是一个真正的问题(例如 slow synchronization),但通常它们基于来自 Java 的过时版本10 多年前 或 以错误的方式理解问题(例如异常/控制流)。