SimpleDateFormatter не работает правильно

1

У меня есть следующий фрагмент кода.

@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

Кто-нибудь знает, почему день и месяц ушли?

Теги:
simpledateformat

3 ответа

10
Лучший ответ

Y представляет собой недельный год. y используется для сопоставления года

SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
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.

1

Немного более здоровое решение

SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"
                                                                ,Locale.ENGLISH);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню