【发布时间】:2014-06-22 17:08:05
【问题描述】:
我的程序正在将输入字符串解析为LocalDate 对象。大多数情况下,字符串看起来像30.03.2014,但偶尔看起来像3/30/2014。根据具体情况,我需要使用不同的模式来调用DateTimeFormatter.ofPattern(String pattern)。基本上,在进行解析之前,我需要检查字符串是否与模式dd.MM.yyyy 或M/dd/yyyy 匹配。
正则表达式方法类似于:
LocalDate date;
if (dateString.matches("^\\d?\\d/\\d{2}/\\d{4}$")) {
date = LocalDate.parse(dateString, DateTimeFormatter.ofPattern("M/dd/yyyy"));
} else {
date = LocalDate.parse(dateString, DateTimeFormatter.ofPattern("dd.MM.yyyy"));
}
这可行,但在匹配字符串时也可以使用日期模式字符串。
是否有任何标准方法可以使用新的 Java 8 时间 API 来执行此操作,而无需使用正则表达式匹配?我查看了 DateTimeFormatter 的文档,但找不到任何东西。
【问题讨论】:
-
你为什么不把
replace("//", ".")串起来? -
我认为没有特定的方法可以检查日期是否遵循给定的模式。我会使用 SimpleDateFormat.parse 方法并检查 ParseException。如果您确定日期是正确的并且它是两种模式之一,您可以检查是否有“。”在字符串中。
-
@RobertNiestroj 因为月份和日期在两种模式中的位置不同。
-
@HermanTorjussen 我不会将此作为答案发布,因为我不知道您为此创建课程是否可行。是吗?像这样:tryjava8.com/app/snippets/5368a343e4b0753f2af0f806
-
@Max
SimpleDateFormat类不能直接解析为LocalDate,只能解析为java.util.Date,这是完全不同的。
标签: java java-8 datetime-format datetime-parsing java-time