java - 如何解析带有可选部分的日期时间?

标签 java date datetime java-8 datetime-format

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

  • 月/日/年
  • 月/日/年
  • 月/日/年
  • 月/日/年
  • 以上任何带有 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 的评论时发布的错误已通过设置可选小时和分钟的默认值来修复。

关于java - 如何解析带有可选部分的日期时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42310409/

相关文章:

java - 如何使用 jaxb2 生成 toString 方法?

java - 重启后恢复报警计数器

mysql - 如何在mysql中根据2个日期选择记录

java - 如何从Java中的日期字段获取特定时区的日历日期?

Django admin datefield-datetimefield 混淆

java - 将字符串替换为空格

java - 如何在 Apache Solr 中创建自己的字段并上传文档?

java - 如何选择时间/日期并将其放入计时器任务中?

java - JPQL和日期比较(查询中的约束)

javascript - Chart.js 显示时间 (HH :MM:SS - 24 hour clock) on xAxis