我的要求是基于指定的一组有效格式来验证日期字符串格式是否正确。Java 8 DateTimeFormatterBuilder()。appendOptional不工作
有效格式:
MM/dd/yy
MM/dd/yyyy
我创建使用Java 8 DateTimeFormatterBuilder创建支持多个可选格式柔性格式化一个简单的测试方法。下面是代码:
public static void test() {
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendOptional(DateTimeFormatter.ofPattern("MM/dd/yy"))
.appendOptional(DateTimeFormatter.ofPattern("MM/dd/yyyy"))
.toFormatter();
String dateString = "10/30/2017";
try {
LocalDate.parse(dateString, formatter);
System.out.println(dateString + " has a valid date format");
} catch (Exception e) {
System.out.println(dateString + " has an invalid date format");
}
}
当我运行此,这里是输出
10/30/2017 has an invalid date format
正如你在代码中看到,有效的日期格式是MM/DD/YY和MM/DD/YYYY。 我的预计是,日期10/30/2017应该是有效的,因为它匹配MM/dd/yyyy。但是,10/30/2017被报告为无效。
什么问题?为什么这不起作用?
我也试过
代替
.appendOptional(DateTimeFormatter.ofPattern("MM/dd/yy"))
.appendOptional(DateTimeFormatter.ofPattern("MM/dd/yyyy"))
,但仍然有同样的问题。
此代码按预期运行,如果我使用:
String dateString = "10/30/17";
代替
String dateString = "10/30/2017";
我有2个问题
这是怎么回事错在这里?为什么它不适用于“10/30/2017”?如何正确创建一个灵活的日期格式化程序(一个支持多种可选格式的格式化程序)?我知道使用[]在模式字符串本身中创建可选部分。我在找东西更类似于我想(避免[模式字符串中]和使用单独的可选子句对每个单独的格式字符串)
这不是'appendOptional()'应该如何使用(请参阅下面的答案)。为了允许不同的日期格式,最简单的方法可能是创建一个格式化程序列表,但我不确定这是最好的方法。 –