DateTimeFormatter的年份的最后一位数字

时间:2015-10-20 13:31:59

标签: java date java-8 java-time

对于2014年,我想显示42029 -> 9

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

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

DateTimeFormatter.ofPattern("yMMdd"); //returns 20151020. I want just 51020

4 个答案:

答案 0 :(得分: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

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

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

答案 1 :(得分:1)

使用DateTimeFormatter是不可能的。检查此链接:

https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx

“y”格式化程序应将年份从0到99

您应该自己提取最后一位数并创建字符串。

答案 2 :(得分:0)

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

year % 10

提取最右边的数字。

答案 3 :(得分:0)

String sb = new SimpleDateFormat("yMMdd").format(new Date());
        System.out.println(sb); // prints 151020
        sb = sb.substring(1, sb.length()); //remove 1st char
        System.out.println(sb); //prints 51020