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