如何用可选部分解析日期时间?
我的日期时间可能是以下格式之一:
- 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评论时发布的错误是通过设置可选小时和分钟的默认值来修复的。