Java, ошибка непарсируемой даты, преобразование из строки в дату - PullRequest
0 голосов
/ 14 октября 2019

У меня есть эта строка "2019-10-17T16:00:00+02:00", и я хочу преобразовать этот String в Date объект, потому что я хочу изменить формат. Я попробовал это:

SimpleDateFormat sd1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
Date dt = sd1.parse(mystring);
SimpleDateFormat sd2 = new SimpleDateFormat("yyyy-MM-dd");
String newDate = sd2.format(dt);
System.out.println(newDate);

Но у меня есть это сообщение: Неразборчивая дата: "2019-10-17T16: 00: 00 + 02: 00"

Что я могу сделать? Спасибо всем

Ответы [ 2 ]

3 голосов
/ 14 октября 2019

Ради до даты :
Пожалуйста, рассмотрите возможность использования современного API даты и времени java.time.
Вы можете легко разбирать и форматировать даты, время и дата, используя его.

См. этот пример:

public static void main(String[] args) {
    String d = "2019-10-17T16:00:00+02:00";
    OffsetDateTime odt = OffsetDateTime.parse(d, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
    System.out.println(odt.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss Z")));
}

Вывод такой:

2019/10/17 16:00:00 +0200

Этот форматтер используется по умолчанию, поэтому нетнужно уточнить. Стандартные форматы ISO 8601 используются по умолчанию в java.time .

OffsetDateTime.parse( "2019-10-17T16:00:00+02:00" ) // ISO 8601 formats can be parsed directly, without specifying a `DateTimeFormatter` object.

Если вы просто хотите извлечь часть даты из времени даты, то вы можете сделать это, просто применив две дополнительные строки кода:

LocalDate date = odt.toLocalDate();
System.out.println(date.format(DateTimeFormatter.ISO_DATE));
2 голосов
/ 14 октября 2019

Буквой шаблона для часовых поясов ISO 8601 является X, а не Z, как уже отмечали другие.

Использование:

SimpleDateFormat sd1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");

И разбор будет успешным.

...