crm*_*ham 4 java formatting date simpledateformat
给出以下代码:
[...]
public void testFormatDateString() throws ParseException {
String dateString = new java.util.Date().toString();
System.out.println(dateString);
SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss z YYYY", Locale.ENGLISH);
Date date = format.parse(dateString);
System.out.println(date.toString());
}
[...]
Run Code Online (Sandbox Code Playgroud)
之前:
Sat Aug 19 18:26:11 BST 2017
后:
Sat Jan 07 17:26:11 GMT 2017
为什么日期改变了?
大写Y是"周年",它有364或371天而不是通常的365或366.小写y(使用的是Date#toString)一切都按预期工作:
public void testFormatDateString() throws ParseException {
String dateString = new java.util.Date().toString();
System.out.println(dateString);
// Force to Locale.US as this is hardcoded in Date#toString
SimpleDateFormat format = new SimpleDateFormat(
"EEE MMM dd HH:mm:ss z yyyy", Locale.US);
Date date = format.parse(dateString);
System.out.println(date.toString());
}
Run Code Online (Sandbox Code Playgroud)
输出:
Sat Aug 19 17:50:39 GMT 2017
Sat Aug 19 17:50:39 GMT 2017
Run Code Online (Sandbox Code Playgroud)
正如评论中所提到的,确保Locale.US在解析时包含dateString,因为它是硬编码的Date#toString.有关详情,请参阅此问题.