Guo*_*Guo 1 java datetimeformatter
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
Run Code Online (Sandbox Code Playgroud)
为什么year0.format(yyyy)andyear0.format(yy)返回错误的结果0001或者01,但year0.format(yyy)返回正确的结果000?怎么修?
DateTimeFormatter 的文档说这y是“纪元年份”,这意味着永远不应该输出 0,因为没有纪元(AD 或 BC)的年份为 0。根据这些相同的文档,您正在寻找u而不是y如果您想要年份不显示纪元,即将公元前 1 年视为“0”年,将公元前 2 年视为“-1”年,等等。
相反,如果您想显示时代和年份,那就是Gie yyyy GG。
由于当时和现在之间的日历变化,过去许多个世纪的日期可能会很复杂,因此请小心假设您可以将它们插入标准库并获得“正确”的结果。
“yyy”可能会给您不同的结果,因为“yyy”和“uuu”有特殊情况规则,如文档中所述。仅当您希望使用这些特定规则格式化输出时才使用它们。
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |