Неразборчивая дата: "Название дня в неделе" (SimpleDateFormat)

Я пытаюсь преобразовать дату из String к Date объект:

String dateString = "Mon, 04 Sep 2017 18:30:28";
String dateFormat = "EEE, dd MMM yyyy HH:mm:ss";

Результаты в следующем исключении:

java.text.ParseException: непарсируемая дата: "понедельник, 04 сентября 2017 г. 18:30:28"

Я пробовал разные строки и форматы, и проблема, похоже, в названии недели ('EEE'). Без этого работает отлично.

Также это прекрасно работает:

String dateString = "04 Sep 2017 18:30:28, Mon";
String dateFormat = "dd MMM yyyy HH:mm:ss, EEE";

2 ответа

Решение

Месяц и будни - сокращенный текст. Текст зависит от языка, и если вы не предоставляете конкретную локаль при создании экземпляра SimpleDateFormatter, вместо нее используется локаль системы. Причиной, по которой ваш синтаксический анализ не выполняется с указанием дня недели, а не месяца, может быть в том, что сокращенное название месяца на языке по умолчанию вашей системы совпадает с английским.

Вот некоторый код, как вы должны разобрать дату с текстом:

SimpleDateFormat formatter = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss", Locale.ENGLISH);
formatter.setLenient(false);
ParsePosition pos = new ParsePosition(0);
return formatter.parse(toParse, pos);

с toParse будучи строкой, содержащей вашу дату в виде текста.

Вы не добавили локаль, которая должна была вызвать исключение синтаксического анализа при анализе текста (ов) для дня недели и месяца

    public static void main(String[] args) throws ParseException {
        String dateString = "Mon, 04 Sep 2017 18:30:28";
        SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss", Locale.ENGLISH);
        System.out.println(dateFormat.parse(dateString));
    }

Производит следующий вывод

Mon Sep 04 18:30:28 IST 2017
Другие вопросы по тегам