如何用可选部分解析日期时间?

我的日期时间可能是以下格式之一:

  • MM / DD / YY
  • M / DD / YY
  • MM / d / yy的
  • M / d / yy的
  • 任何上述HH:mm
  • 任何上述4位数的年份

我构建的DateTimeFormatter如下:

 new DateTimeFormatterBuilder() .appendValue(ChronoField.MONTH_OF_YEAR, 1, 2, SignStyle.NEVER) .appendLiteral('/') .appendValue(ChronoField.DAY_OF_MONTH, 1, 2, SignStyle.NEVER) .appendLiteral('/') .appendValue(ChronoField.YEAR_OF_ERA, 2, 4, SignStyle.NEVER) .optionalStart() .appendLiteral(' ') .appendValue(HOUR_OF_DAY, 2) .appendLiteral(':') .appendValue(MINUTE_OF_HOUR, 2) .toFormatter(); 

但它无法格式化2/9/17 。 为什么?

这有效:

 new DateTimeFormatterBuilder() .appendValue(ChronoField.MONTH_OF_YEAR, 1, 2, SignStyle.NEVER) .appendLiteral('/') .appendValue(ChronoField.DAY_OF_MONTH, 1, 2, SignStyle.NEVER) .appendLiteral('/') .appendValueReduced(ChronoField.YEAR, 2, 4, yearMonth.getYear()) .appendPattern("[ HH:mm]") .parseDefaulting(ChronoField.HOUR_OF_DAY, 0) .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0) .toFormatter(); 

我在回复Meno Hochschild评论时发布的错误是通过设置可选小时和分钟的默认值来修复的。