В настоящее время я использую ниже даты парсер для разбора даты, которая передается в String
:Java: Синтаксический Дата как строка, которая может или не может содержать часовой пояс информацию
public static final DateTimeParser FRACTION_PARSER = new DateTimeFormatterBuilder()
.appendLiteral('.').appendFractionOfSecond(0, 3).toParser();
public static final DateTimeFormatter DATE_FORMATTER = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd'T'HH:mm:ss")
.appendOptional(FRACTION_PARSER).appendLiteral('Z')
.toFormatter();
И у меня есть ниже условия для анализа:
public static void main(String[] args) {
System.out.println(DATE_FORMATTER.parseDateTime("2016-01-13T13:38:19.679Z"));
System.out.println(DATE_FORMATTER.parseDateTime("2016-01-13T13:38:19.67Z"));
System.out.println(DATE_FORMATTER.parseDateTime("2016-01-13T13:38:19.6Z"));
System.out.println(DATE_FORMATTER.parseDateTime("2016-01-13T13:38:19Z"));
System.out.println(DATE_FORMATTER.parseDateTime("2016-01-15T16:58:57.649-05:00"));
}
Он анализирует первые четыре случая правильно, но не удается за последний с ниже ошибки:
Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "2016-01-15T16:58:57.649-05:00" is malformed at "-05:00"
Я понимаю его недостаток, поскольку я добавил в формат буквально Z
. Но я ожидал, что он будет работать как парсер timeZone!
Есть ли простой способ использовать тот же парсер с дополнительным параметром для всех вышеперечисленных форматов? или мне нужно использовать разные форматы в зависимости от строки, которую я получаю?
Возможно ли это? или потребуется каждый раз, чтобы иметь некоторый часовой пояс в String? –
Обязательно. Если вы хотите сделать это необязательным, оберните его в другой парсер и используйте appendOptional (парсер). – pkalinow