Исключение синтаксиса формата даты - "EEE MMM dd HH: mm: ss Z yyyy"

У меня возникла проблема с датой даты синтаксиса даты:

SimpleDateFormat parserSDF=new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy", Locale.getDefault());


parserSDF.parse("Wed Oct 16 00:00:00 CEST 2013");

получено исключение

Exacly Я хочу разобрать эту дату формата на yyyy-MM-dd Я пытаюсь:

SimpleDateFormat parserSDF = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
Date date = parserSDF.parse("Wed Oct 16 00:00:00 CEST 2013");

возьмите: java.text.ParseException: Непревзойденная дата: "Ср 16 октября 00:00:00 CEST 2013"


ОК Я перехожу к и работает:

SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy", Locale.ENGLISH);
Date date = parserSDF.parse("Wed Oct 16 00:00:00 CEST 2013");

Ответ 1

Я собираюсь предположить, что Locale.getDefault() для вас pl-PL, так как вы, кажется, находитесь в Польше.

Английские слова в строках даты, следовательно, дают неподдельную дату.

Соответствующая польская дата String будет чем-то вроде

"Wt paź 16 00:00:00 -0500 2013"

В противном случае измените Locale на Locale.ENGLISH так, чтобы объект SimpleDateFormat мог анализировать даты String с английскими словами.

Ответ 2

Вместо того, чтобы использовать Locale.default, что вы и другие часто не знаете, какой по умолчанию, вы можете решить, используя locale.ENGLISH, потому что я вижу, что ваша строковая дата имеет формат на английском языке. Если вы находитесь в других странах, формат будет другим.

Вот мой пример кода:

public static void main(String[] args) {
    try {
        SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.ENGLISH);
        Date date = parserSDF.parse("Wed Oct 16 00:00:00 CEST 2013");
        System.out.println("date: " + date.toString());
    } catch (ParseException ex) {
        ex.printStackTrace();
    }
}

Результат будет: date: Wed Oct 16 05:00:00 ICT 2013. Или вы можете решить, какую часть этой даты распечатать, используя свои поля.

Надеюсь, что эта помощь:)

Ответ 3

Я думаю, что исходное исключение связано с Z в вашем формате. Per документация:

Z   Time zone   RFC 822 time zone   -0800

Скорее всего, вы хотели использовать нижний регистр Z