DateTimeFormatter的年份的最后一位数字

Vex*_*toR 4 java date java-8 java-time

这一年2014我想要展示4和为2029 -> 9

我知道如何格式化4位=> yyyy和两位=>yy

但我无法理解,如何用最后一个数字来做

DateTimeFormatter.ofPattern("yMMdd"); //returns 20151020. I want just 51020
Run Code Online (Sandbox Code Playgroud)

Tun*_*aki 5

您可以通过构建自己的DateTimeFormatter(并且不依赖于计算模式演变时可能失败的子字符串)来完成此操作,如下所示:

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                                        .appendValueReduced(ChronoField.YEAR, 1, 1, 0)
                                        .appendPattern("MMdd")
                                        .toFormatter();
System.out.println(LocalDate.now().format(formatter)); // prints 51020
System.out.println(LocalDate.of(2029, 1, 1).format(formatter)); // prints 90101
Run Code Online (Sandbox Code Playgroud)

但是,此格式化程序只能用于格式化LocalDate,不能用于解析LocalDate.

appendValueReduced用于格式化时间字段的减少值.在这种情况下,我们附加一个固定宽度为1的值,并说基值为0(这样,有效值将介于0和9之间).


Bat*_*eba 1

它不太可能DateTimeFormatter支持这种不寻常的要求。如果您将年份作为整数类型,则使用

year % 10

提取最右边的数字。