Ошибка при преобразовании строки в дату в Java

DateFormat d1;
d1 = new SimpleDateFormat("dd-MMMM-yyyy");

public String duedate = "20-April.2019";
Date du =  d1.parse(duedate);

Ошибка, которую я продолжаю получать:

Конструктор по умолчанию не может обрабатывать исключение типа ParseException, созданное неявным суперконструктором. Необходимо определить явный конструктор


person Imdumb    schedule 17.03.2019    source источник
comment
Этот загадочный JavaDoc...   -  person LppEdd    schedule 17.03.2019
comment
dd-MMMM-yyyy и 20-April.2019: - против .   -  person ernest_k    schedule 17.03.2019
comment
Я рекомендую вам не использовать DateFormat, SimpleDateFormat и Date. Эти классы плохо спроектированы и давно устарели, первые два, как известно, доставляют много хлопот. Вместо этого используйте DateTimeFormatter и LocalDate из java.time, современного API даты и времени Java.   -  person Ole V.V.    schedule 17.03.2019
comment
@DrMido Лучше добавлять теги, описывающие проблему или ошибку, о которой спрашивают, чем теги, которые обычно описывают код или его желаемый результат.   -  person Ole V.V.    schedule 17.03.2019
comment
Кстати, я не думаю, что какой-либо из трех ответов, опубликованных здесь до сих пор, исправит сообщение об ошибке, которое вы цитируете. Некоторые ответы на связанный исходный вопрос тоже неверны, но я думаю, что, по крайней мере, те, за которые проголосовали, в порядке.   -  person Ole V.V.    schedule 17.03.2019
comment
Выполните поиск LocalDate и DateTimeFormatter классы.   -  person Basil Bourque    schedule 17.03.2019


Ответы (3)


В нем должно быть только три буквы «М».

d1 = new SimpleDateFormat("dd-MMM-yyyy");

И в дате не должно быть точки.

String duedate = "20-April-2019";
Date du =  d1.parse(duedate);
person Vinay Avasthi    schedule 17.03.2019
comment
Для большинства языков 4 'M' будет правильным, так как строка содержит полное название месяца. 3 «М» означает сокращение месяца, например Apr. - person Ole V.V.; 17.03.2019

Прежде всего, формат даты и срок выполнения должны соответствовать друг другу, поэтому, если ваш формат даты использует тире, срок выполнения не может использовать точки.

String duedate = "20-April-2019";

Во-вторых, вы должны учитывать ошибку ParseException, поэтому вы должны окружить объявление Date с помощью try/catch следующим образом:

try{
    Date du =  d1.parse(duedate);
} catch(ParseException e){
    e.printStackTrace();
}
person Pier Francesco    schedule 17.03.2019

Информацию о том, как анализировать строку даты с помощью SimpleDateFormat, можно найти здесь: https://docs.oracle.com/javase/10/docs/api/java/text/SimpleDateFormat.html

Ошибка появляется, потому что ваша строка формата даты не соответствует строке даты, которую вы пытаетесь проанализировать.

person DonatasD    schedule 17.03.2019