小编Deb*_*tra的帖子

Java 8 DateTimeFormatterBuilder()。appendOptional不起作用

我的要求是根据一组指定的有效格式来验证日期字符串的格式正确。

有效格式:

MM/dd/yy
MM/dd/yyyy
Run Code Online (Sandbox Code Playgroud)

我创建了一个简单的测试方法,该方法使用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");
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行此,这里是输出

10/30/2017 has an invalid date format
Run Code Online (Sandbox Code Playgroud)

如您在代码中看到的,有效的日期格式是MM / dd / yy和MM / dd / yyyy。我的期望是日期10/30/2017应该有效,因为它与MM / dd / yyyy相匹配。但是,2017年10月30日被报告为无效。

怎么了?为什么这不起作用?

我也试过

.appendOptional(DateTimeFormatter.ofPattern("MM/dd/yy[yy]"))
Run Code Online (Sandbox Code Playgroud)

代替

.appendOptional(DateTimeFormatter.ofPattern("MM/dd/yy"))
.appendOptional(DateTimeFormatter.ofPattern("MM/dd/yyyy"))
Run Code Online (Sandbox Code Playgroud)

但仍然存在相同的问题。

如果使用以下代码,此代码将按预期运行:

String …
Run Code Online (Sandbox Code Playgroud)

java datetime date datetime-format java-date

5
推荐指数
1
解决办法
947
查看次数

标签 统计

date ×1

datetime ×1

datetime-format ×1

java ×1

java-date ×1