DateTimeFormatter 的最后一位年份
Last digit of year with DateTimeFormatter
2014
年我想显示 4
和 2029 -> 9
我知道如何使用 4 位数字 => yyyy
和两位数 => yy
进行格式化
但是我看不懂,最后一位怎么弄
DateTimeFormatter.ofPattern("yMMdd"); //returns 20151020. I want just 51020
DateTimeFormatter
不太可能支持这种不寻常的要求。如果您将年份作为整数类型,则使用
year % 10
提取最右边的数字。
DateTimeFormatter 做不到这一点。检查这个 link:
https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx
"y" 格式化程序应该抛出从 0 到 99 的年份
您只需自己提取最后一位数字并创建字符串即可。
String sb = new SimpleDateFormat("yyMMdd").format(new Date());
System.out.println(sb); // prints 151020
sb = sb.substring(1, sb.length()); //remove 1st char
System.out.println(sb); //prints 51020
您可以通过构建自己的 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 之间)。
2014
年我想显示 4
和 2029 -> 9
我知道如何使用 4 位数字 => yyyy
和两位数 => yy
但是我看不懂,最后一位怎么弄
DateTimeFormatter.ofPattern("yMMdd"); //returns 20151020. I want just 51020
DateTimeFormatter
不太可能支持这种不寻常的要求。如果您将年份作为整数类型,则使用
year % 10
提取最右边的数字。
DateTimeFormatter 做不到这一点。检查这个 link:
https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx
"y" 格式化程序应该抛出从 0 到 99 的年份
您只需自己提取最后一位数字并创建字符串即可。
String sb = new SimpleDateFormat("yyMMdd").format(new Date());
System.out.println(sb); // prints 151020
sb = sb.substring(1, sb.length()); //remove 1st char
System.out.println(sb); //prints 51020
您可以通过构建自己的 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 之间)。