Разобрать строку даты в 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