SimpleDateFormat.parse() return 日期格式不正确 "YYYY/MMM/d"

SimpleDateFormat.parse() return incorrect date for format "YYYY/MMM/d"

我不明白为什么解析后我收到其他日期:

Date date = new Date();
System.out.println(date);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY/MMM/d");
String dateString = simpleDateFormat.format(date);
System.out.println(dateString);
date = simpleDateFormat.parse(dateString);
System.out.println(date);

输出:

Tue Apr 09 12:18:35 AST 2019
2019/Apr/9
Mon Dec 31 12:00:00 AST 2018

如果您将年份格式更正为

yyyy

而不是

YYYY

事情会按预期进行

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MMM/d");

Java 7 introduced YYYY as a new date pattern to identify the date week year.

能否将年份改为 yyyy

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MMM/d");

这些是 simpleDateFormatter 的模式

G 纪元代号(基督之前,基督之后) y 年份(例如 12 或 2012)。使用 yy 或 yyyy。 M 年中的月份。 M 的数量决定格式的长度(例如 MM、MMM 或 MMMMM) d 月中的第几天。 d 的数量决定格式的长度(例如 d 或 dd) h 一天中的小时,1-12(AM / PM)(通常是 hh) H 一天中的小时数,0-23(通常为 HH) m 小时中的分钟,0-59(通常为 mm) s 分钟中的秒数,0-59(通常为 ss) S 以秒为单位的毫秒数,0-999(通常为 SSS) E 一周中的第几天(例如星期一、星期二等) D 一年中的第几天 (1-366) F 一个月中的星期几(例如 12 月的第一个星期四) w 一年中的第几周 (1-53) W 月中的第几周 (0-5) 一个 AM / PM 标记 k 一天中的小时(1-24,不同于 HH 的 0-23) K 一天中的小时,AM / PM (0-11) 时区 ' 文本分隔符转义 ' 单引号