This question already has answers here:
Using DateTimeFormatter on january first cause an invalid year value

(1个答案)



Can't parse String to LocalDate (Java 8)

(2个答案)


2年前关闭。




DateTimeFormatter(具有以下模式)与LocalDate一起使用会导致错误的年份。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

DateTimeFormatter format = DateTimeFormatter.ofPattern("MM-d-YYYY");
LocalDate date = LocalDate.of(2018, 12, 31);

date.format(format); // returns 12-31-2019 (expected 2018)

为什么会这样?

最佳答案

发生这种情况是因为MM-d-YYYY模式不是我们认为的那样。

如果我们看the documentation,我们会看到

 Symbol  Meaning                     Presentation      Examples
 ------  -------                     ------------      -------
 y       year-of-era                 year              2004; 04
 Y       week-based-year             year              1996; 96

因此,YYYY使用基于周的年份,而实际上我们想要yyyy,即年份。

有关差异,请参见this related questionthe Wikipedia article on week dates

所以我们想要的模式是MM-d-yyyy

关于java - 为什么使用带有YYYY模式的DateTimeFormatter格式化日期会给出错误的年份? [复制],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51141995/

10-13 05:04