java date parse missbehaviour

use*_*261 6 java date

SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, YYYY, EEE", Locale.US);

System.out.println(sdf.format(new Date()));
System.out.println(sdf.format(sdf.parse("Apr 27, 2018, Fri")));
Run Code Online (Sandbox Code Playgroud)

Java不会按预期解析日期并输出:

Apr 27, 2018, Fri
Jan 05, 2018, Fri // I can not understand why java parse the month of April as January
Run Code Online (Sandbox Code Playgroud)

ach*_*áin 7

您的问题是您正在使用YYYY,代表Week year,而您想要yyyy代表哪个year,请在此处查看所有选项.

SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy, EEE", Locale.US);
Run Code Online (Sandbox Code Playgroud)