Неразборчивая дата: "Название дня в неделе" (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