Skip to content

Commit 30e7eb4

Browse files
committed
[fix] Java8 新特性-> 日期格式化的跨年问题
使用 `YYYY` 显示年份时,会显示当前时间所在周的年份,在跨年周会有问题。一般情况下都使用 `yyyy`,来显示准确的年份。
1 parent 94a6d4b commit 30e7eb4

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

Diff for: docs/java/new-features/Java8新特性总结.md

+22
Original file line numberDiff line numberDiff line change
@@ -824,6 +824,28 @@ DateTimeFormatter formatter=DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss");
824824
System.out.println(formatter.format(rightNow));//2019-03-12 16:26:48
825825
```
826826

827+
**修正(参见: [issue#1157](https://github.com/Snailclimb/JavaGuide/issues/1157))**:使用 `YYYY` 显示年份时,会显示当前时间所在周的年份,在跨年周会有问题。一般情况下都使用 `yyyy`,来显示准确的年份。
828+
829+
跨年导致日期显示错误示例:
830+
831+
```java
832+
LocalDateTime rightNow = LocalDateTime.of(2020, 12, 31, 12, 0, 0);
833+
String date= DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(rightNow);
834+
// 2020-12-31T12:00:00
835+
System.out.println(date);
836+
DateTimeFormatter formatterOfYYYY = DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss");
837+
// 2021-12-31 12:00:00
838+
System.out.println(formatterOfYYYY.format(rightNow));
839+
840+
DateTimeFormatter formatterOfYyyy = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
841+
// 2020-12-31 12:00:00
842+
System.out.println(formatterOfYyyy.format(rightNow));
843+
```
844+
845+
从下图可以更清晰的看到具体的错误,并且 IDEA 已经智能地提示更倾向于使用 `yyyy` 而不是 `YYYY` 。
846+
847+
![](https://img-blog.csdnimg.cn/2021042717491413.png)
848+
827849
### LocalDateTime(本地日期时间)
828850

829851
LocalDateTime 同时表示了时间和日期,相当于前两节内容合并到一个对象上了。LocalDateTimeLocalTime还有 LocalDate 一样,都是不可变的。LocalDateTime 提供了一些能访问具体字段的方法。

0 commit comments

Comments
 (0)