简单的日期格式读取月份不正确

Simple date format reading month incorrectly

我正在将日期字符串转换为大纪元时间,然后再转换回来,但是当我转换为大纪元时,似乎在解析日期字符串时忽略了月份

String timeString = "15 Aug 2005 13:07:58.035";
Date dateTime = null;
SimpleDateFormat sdf = new SimpleDateFormat("DD MMM yyyy hh:mm:ss", Locale.US);
try {
    dateTime = sdf.parse(timeString);
} catch (ParseException e) {
    e.printStackTrace();
}
long convert = dateTime.getTime();
System.out.println(str);
System.out.println(convert);
Date epochToString = new Date(convert);
System.out.println(epochToString.toString());

这是输出

15 Aug 2005 13:07:58.035
1105812478000
Sat Jan 15 13:07:58 EST 2005

当我手动计算纪元时间时,日期确实是 2005 年 1 月 15 日,因此出于某种原因,MMM 值在我的格式中被忽略了。

编辑: 我还应该注意,我将格式标记更改为 MM 并尝试在字符串中使用数字表示,但得到了完全相同的结果。

这是因为 DD 表示一年中的某一天。您希望 dd 代表一个月中的某一天。参见 SimpleDateFormat Javadoc

我建议你使用 HH 24 小时时间。