2015-03-11 2 views
3

Я обновляю старый код SimpleDateFormat, чтобы использовать новую Java 8 DateTimeFormatter. SimpleDateFormat, и, таким образом, старый код, принимает строки с материалами в них после даты типа «20130311nonsense». DateTimeFormat Я создал для этих строк DateTimeParseException, что, вероятно, правильно, но я хотел бы поддерживать совместимость. Могу ли я изменить свой DateTimeFormat, чтобы принять эти строки?Как я могу сделать DateTimeFormatter, который принимает завершающий мусор?

Я в настоящее время его создания, как это:

DateTimeFormatter.ofPattern("yyyyMMdd") 
+1

Судя по фиксированному размеру, вы не можете просто взять подстроку (0,8) – brian

+1

Регулярное соответствие региону сначала. – jn1kk

+0

@brian, да, это будет работать на этот раз, но я хотел бы получить более общее решение в случае, если я должен сделать это с форматами, которые в будущем не являются фиксированными. –

ответ

4

Используйте parse() метод, который принимает ParsePosition, как и та не терпит неудачу, когда он не читает весь текст:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); 

    TemporalAccessor parse = formatter.parse("20140314 some extra text", new ParsePosition(0)); 
    System.out.println(LocalDate.from(parse)); 

Экземпляр ParsePosition, который вы передадите, также будет обновлен, где разбор остановлен, поэтому, если вам нужно что-то сделать с оставшимся текстом, будет полезно назначить его переменной rpior для вызова синтаксического анализа.