SimpleDateFormat无法正常工作

时间:2014-09-24 20:01:20

标签: java simpledateformat

我有以下代码段。

@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

有人知道为什么日和月都关闭了吗?

3 个答案:

答案 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);
相关问题