Java 带有嵌套选项的DateTimeFormatter
我有三种类型的ISO日期:Java 带有嵌套选项的DateTimeFormatter,java,Java,我有三种类型的ISO日期:yyyy,yyy-MM,yyy-MM-dd。换句话说,从一年到一个月到一天越来越精确。如果缺少字段,则应将其映射到可能的最低值(缺少的日期->月的第一天//缺少的月份->年的第一个月) 一天不能没有一个月,所以我认为使用嵌套括号可以很好地工作: DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy[-MM[-dd]]"); LocalDate ld = LocalDate.pa
yyyy
,yyy-MM
,yyy-MM-dd
。换句话说,从一年到一个月到一天越来越精确。如果缺少字段,则应将其映射到可能的最低值(缺少的日期->月的第一天//缺少的月份->年的第一个月)
一天不能没有一个月,所以我认为使用嵌套括号可以很好地工作:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy[-MM[-dd]]");
LocalDate ld = LocalDate.parse("2019-08-10", dtf); // ok
ld = LocalDate.parse("2019-08", dtf); // error
ld = LocalDate.parse("2019", dtf); // error
但是,遗憾的是,两个最底层的人吐出了一个DateTimeParseException。这可能吗
编辑:明白了。事实证明,正如注释中提到的,默认值并不是隐式设置的。这就解决了这个问题:
DateTimeFormatter dtf = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ofPattern("yyyy[-MM[-dd]]"))
.parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
.parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
.toFormatter();
该模式无效,它不是正则表达式,无法处理这样的缺失值。那么什么可以处理这样的缺失值呢?有可能吗?这个错误应该给你一个提示。一个
LocalDate
由所有三部分组成。输出应该由所有三部分组成。2019-08应解析为2019-08-01。是否回答了您的问题?