当前位置: 首页 > 知识库问答 >
问题:

为什么使用带有YYYY模式的DateTimeFormatter格式化日期会给出错误的年份?[副本]

易嘉胜
2023-03-14
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)

共有1个答案

龙弘盛
2023-03-14

出现这种情况是因为模式mm-d-yyyy并不是我们所认为的那样。

如果我们查看文档,我们会看到

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

所以yyyy使用的是基于周的year,而实际上我们需要的是yyyy,即year-of-era。

 类似资料:
  • 我输入的日期像。日期是由谷歌语音转文本服务构建的。 要将此日期格式化为不同的格式,我将使用下一段代码: 我更愿意避免添加额外的逻辑和改进输入数据的日期模式。正是在这一步,我需要帮助(我在java文档中找不到正确的解决方案)。 所以我希望得到格式化程序的更正或确认,java不支持日期可以是、等等的标准。

  • 我使用下面的代码来格式化日期。但是当我以不正确的格式给出数据时,它会给出意想不到的结果。 在上述情况下,输出为-formattedVal:0009-02-05。 它不是抛出解析异常,而是解析值并给我一个不正确的输出。有人能帮我理解这种反常的行为吗。

  • 问题内容: 哪里是。 当我执行以上操作时,时间变成 我在做错什么?这是一个错误吗?我希望它是2013年的第一周,而不是最后一周。 问题答案: 看这里。 该weekyear,模式字母的,周是为了与使用,weekyear。从javadoc的 将模式更改为 然后您将解析为 根据您的情况,2013年的第一周始于2012年。

  • 我正在使用管道来格式化我的日期,但如果没有解决方法,我就无法获得我想要的确切格式。我是误解了管道还是根本不可能? PLNKR视图

  • 我想使用日期格式为yyyy-MM-dd hh:mm:ss的localdatetime.parse()方法解析一个日期,但实际得到的是格式为yyyy-mm-ddthh:mm:ss的日期。我不需要那个“T”。请参阅下面的代码 我得到的结果是2016-10-31T23:59:59。看那个“T”。“t”引起了一些问题,因此我无法将其保存到我的数据库中。我尝试在类型的列中持久化该值;我得到错误-。