Java版本:
1.8.0_202
DateTimeFormatter yy = DateTimeFormatter.ofPattern("yy");
DateTimeFormatter yyy = new DateTimeFormatterBuilder()
.appendValueReduced(ChronoField.YEAR, 3, 3, 0)
.toFormatter();
DateTimeFormatter yyyy = DateTimeFormatter.ofPattern("yyyy");
LocalDateTime now = LocalDateTime.now();
// set year is 0
LocalDateTime year0 = now.withYear(0);
System.out.println("year0: " + year0); // year0: 0000-01-10T09:53:03.551
System.out.println("year0.getYear(): \t" + year0.getYear()); // year0.getYear(): 0
System.out.println("year0.format(yyyy): " + year0.format(yyyy)); // year0.format(yyyy): 0001
System.out.println("year0.format(yyy): \t" + year0.format(yyy)); // year0.format(yyy): 000
System.out.println("year0.format(yy): \t" + year0.format(yy)); // year0.format(yy): 01
System.out.println("============================================================");
// set year is 1
LocalDateTime year1 = now.withYear(1);
System.out.println("year1: " + year1); // year1: 0001-01-10T09:53:03.551
System.out.println("year1.getYear(): \t" + year1.getYear()); // year1.getYear(): 1
System.out.println("year1.format(yyyy): " + year1.format(yyyy)); // year1.format(yyyy): 0001
System.out.println("year1.format(yyy): \t" + year1.format(yyy)); // year1.format(yyy): 001
System.out.println("year1.format(yy): \t" + year1.format(yy)); // year1.format(yy): 01
为什么
year0.format(yyyy)
和year0.format(yy)
返回错误结果0001
或01
,而year0.format(yyy)
返回正确结果000
?如何修复?
不知道为什么“yyy”会给你一个不一致的结果,但是DateTimeFormatter的文档说
y
代表“纪元年份”,这意味着永远不应该给出0,因为没有纪元(AD或BC)有年份0. 根据这些相同的文档,如果您希望显示没有纪元的年份,则需要查找 u
而不是 y
。
如果要同时显示纪元和年份,那就是
G
,即yyyy GG