SimpleDateFormat: исключение неразборчивой даты - PullRequest
7 голосов
/ 10 июня 2011

После просмотра нескольких существующих сообщений я все еще не могу заставить работать мой анализатор SimpleDateFormat. Вот код:

SimpleDateFormat df = new SimpleDateFormat(
    "EEE, dd MMM yyyy HH:mm:ss Z", Locale.US);
try {
    volcanoListDate = df.parse(currentValue);
} catch (ParseException e) {
    Log.d("DEBUG", e.toString());
    Log.d("DEBUG", currentValue);
}

Я всегда получаю исключение ParseException. Вот вывод сообщений отладки:

06-09 23: 52: 17.478: ОТЛАДКА / ОТЛАДКА (2436): java.text.ParseException: Неразборчивая дата:
06-09 23: 52: 17.478: DEBUG / DEBUG (2436): ср., 8 июня 2011 г. 03:23:55 -0500

Locale is is set и шаблон выглядит хорошо. Где я не прав?

Ответы [ 2 ]

4 голосов
/ 10 июня 2011

Вот решение:

            SimpleDateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.US);
        try {
            volcanoListDate = df.parse(currentValue.replaceAll("\\p{Cntrl}", ""));
        } catch (ParseException e) {
            Log.d("VOLCANO_DEBUG", e.toString());
            Log.d("VOLCANO_DEBUG", currentValue);
        }

Важное изменение .replaceAll ("\\ p {Cntrl}", "") , которое удаляет управляющие символы из проанализированной строки,Странно то, что я не вижу ни одного из этих символов с Notepad ++ в xml, откуда взята строка.Однако, очевидно, что-то есть, и оно работает сейчас.

Спасибо за помощь!

3 голосов
/ 10 июня 2011

Проверьте ввод на наличие непечатаемых символов, таких как табуляция (вместо пробела) и т. Д. Иногда причина, по которой он не может выполнить синтаксический анализ, имеет мало общего с форматированием чисел и имеет непосредственное отношение к неожиданнымсимволы (которые вы не всегда можете видеть).

Учитывая, что некоторые люди уже сообщили, что «работает для меня» (@Thanks Bozho!) Я бы сильно подозревал непечатные символы в вашей входной строке.Кто знает, у вас может быть где-то встроенная вертикальная вкладка!

...