DateTimeFormatterBuilder.appendValue(TemporalField, int)
我很惊讶地发现这是可能的(这对我来说没有多大意义)。
DateTimeFormatter dateFormatter = new DateTimeFormatterBuilder()
.appendValue(ChronoField.DAY_OF_MONTH, 1)
.appendValue(ChronoField.MONTH_OF_YEAR, 1)
.appendValue(ChronoField.YEAR, 4)
.toFormatter();
String dateOfBirth = "312015";
LocalDate dateTime = LocalDate.parse(dateOfBirth, dateFormatter);
System.out.println(dateTime);
该片段的输出是:
2015-01-03
不过,它有一些我认为非常严重的限制:它只能解析 1 月到 9 月(不是 10 月到 12 月)中每月 1 到 9 天(而不是 10 到 31 日)内的日期,因为它坚持日期月份和月份各只有 1 位数字。
您可以摆脱以下限制一个月中的某一天省略第二个参数,1
,从第一次调用到appendValue()
。类似的技巧将not这个月的工作,所以今年的最后一个季度已经遥不可及。
为什么单d和单M不起作用?
为什么强制执行单个 d 和单个 M 在这里不起作用?我失踪了吗
这里有东西吗?
To DateTimeFormatter
数字字段的一个模式字母表示“尽可能多的数字”(而不是预期的“1 位数字”)。它没有很好的记录。文档中的这句话有一个提示:
如果字母数为 1,则使用以下命令输出该值
最小位数且无填充。
所发生的情况是,解析会处理一个月中的某一天尽可能多的数字(内部限制最多为 19 个)。在本例中是整个字符串。现在它无法解析任何月份。这是错误消息的原因:
无法在索引 6 处解析文本“312015”
索引 6 是字符串的结尾。
文档链接
的文档DateTimeFormatter https://docs.oracle.com/javase/10/docs/api/java/time/format/DateTimeFormatter.html