我的要求是基於指定的一組有效格式來驗證日期字符串格式是否正確。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()'應該如何使用(請參閱下面的答案)。爲了允許不同的日期格式,最簡單的方法可能是創建一個格式化程序列表,但我不確定這是最好的方法。 –