Разобрать строку даты в Java

У меня есть дата в формате "гггг-мм-дд'т'хх: мм: сс.сссЗ". например, дата "2018-07-17T09:59:51.312Z". Я использую приведенный ниже код для анализа строки в Java.

  String date="2018-07-17T09:59:51.312Z";
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sssZ");
   Date transactionDateTime = simpleDateFormat.parse(date);

Это дает мне "непонятную дату": исключение. Может кто-нибудь, пожалуйста, скажите мне, как это сделать?

2 ответа

Решение

Вы забыли добавить ' перед Z - RFC 822 time zone (-0800)

String date = "2018-07-17T09:59:51.312Z";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
Date transactionDateTime = simpleDateFormat.parse(date);

Это сделает работу

Вы должны рассмотреть использование DateTimeFormatter и ZonedDateTime для этого примера. Date а также SimpleDateFormat старые классы, подвержены ошибкам и могут быть проблематичными; упомянутые более новые классы (Java8+) намного более устойчивы.

И изменить конец вашего шаблона из ...mm:ss.sssZ в ...mm:ss.SSSz,

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSz");
ZonedDateTime zonedDateTime = ZonedDateTime.parse(date, formatter);
System.out.println(formatter.format(zonedDateTime));

Вы также можете использовать OffsetDateTime или Instant (кредит: Ole V.V.), который будет анализировать для вас, давая тот же результат:

System.out.println(OffsetDateTime.parse("2018-07-17T09:59:51.312Z"));
System.out.println(Instant.parse("2018-07-17T09:59:51.312Z"));

Выход:

2018-07-17T09: 59: 51.312Z

Другие вопросы по тегам