【问题标题】:Wrong output with Java SimpleDateFormat [duplicate]Java SimpleDateFormat 的错误输出 [重复]
【发布时间】:2021-08-11 18:03:28
【问题描述】:

我需要将日期从这种格式:WeekDay Month DD HH:MM:SS GFT YYYY解析为这种格式:YYY/MM/DD,这是我想做什么:

SimpleDateFormat format = new SimpleDateFormat("YYYY/MM/DD");
String conclusionDate = format.format(filter.getConclusionDate());

但是发生了一些错误。例如,当我尝试格式化此日期:“Thu Sep 01 00:00:00 GFT 2016”时,我得到的是“2016/09/245” “2016/09/01

最奇怪的是,它似乎只发生在与 1 月不同的月份。当我尝试另一个随机示例时,例如“Sat Jan 01 00:00:00 GFT 2000”,我得到了我想要的结果:“2000/01/01”。如果我改变日期字段,它仍然可以正确格式化

但是当我把它改成另一个月份时,比如 2 月(“Tue Feb 01 00:00:00 GFT 2000”),我弄错了:“2000/02/ 32 "

为什么会这样?

OBS:在您问之前:是的,我已经检查过,getConclusionDate() 中返回的日期完全符合预期格式 WeekDay Month DD HH:MM:SS GFT YYYY .

【问题讨论】:

  • 例如,当我尝试格式化此日期时:“Thu Sep 01 00:00:00 GFT 2016” 你需要 parse那首先。这是怎么做到的?
  • 我建议你不要使用SimpleDateFormatDate。这些类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time APILocalDateDateTimeFormatter

标签: java date format


【解决方案1】:

D 是一年中的哪一天,d 是一个月中的哪一天。你要YYY/dd/MM https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多