SimpleDateFormat 不可逆?

SimpleDateFormat not reversible?

以下代码在将数据转换为字符串并返回到 java 7 以下的日期时未按预期运行:

final long epochTime = 1489669024142L;
String pattern = "ddMMMYY HH:mm";
final SimpleDateFormat format = new SimpleDateFormat(pattern, Locale.ENGLISH);
final Date inputDate = new Date(epochTime);
final String date1 = format.format(inputDate);
final Date date2 = format.parse(date1);

执行这个给了我:

inputDate: Thu Mar 16 13:57:04 CET 2017
date1: 16Mar17 13:57
date2: Sun Jan 01 13:57:00 CET 2017

很明显,这里有 3 个月的差异,而我预计会有 4 秒的差异。

我正在使用 java.util.Date,无法使用 JodaTime。

知道这种巨大差异是从哪里来的吗?

你必须使用小写的 y 作为年份

因为大写的 Y 是星期年,小写的 y 是年。有关详细信息,请参阅 javadoc

String pattern = "ddMMMyy HH:mm";