我有以下代码段。
@Override
public String toString() {
try {
String calString = "Sat Sep 27 00:00:00 EDT 2014";
SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss z YYYY");
System.out.println("calString " + calString);
Date date = formatter.parse(calString);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
System.out.println("month " + calendar.get(Calendar.MONTH));
System.out.println("day " + calendar.get(Calendar.DAY_OF_MONTH));
DateFormat df = new SimpleDateFormat("YYYYMMdd");
System.out.println("format date" + df.format(date));
return df.format(date);
} catch (ParseException ex) {
return null;
}
}
预期输出应为20140927
但我得到了这个。
calString Sat Sep 27 00:00:00 EDT 2014
month 0
day 3
format date 20140103
有人知道为什么日和月都关闭了吗?
答案 0 :(得分:10)
Y
代表周年。 y
用于匹配年份
SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
答案 1 :(得分:4)
您使用YYYY
代替yyyy
。这意味着“周年”,与“一年中的一周”一起使用。只需在YYYY
个构建器中将yyyy
更改为SimpleDateFormat
,即可获得以下输出:
calString Sat Sep 27 00:00:00 EDT 2014
month 8
day 27
format date20140927
请注意,月份为8而不是9,因为java.util.Calendar
中的月份为0。
答案 2 :(得分:1)
更健康的解决方案
SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"
,Locale.ENGLISH);