아래 Java8의 LocalDate.parse()를 그냥 예제대로 사용하면, ParseException이 발생한다. Java8의 초창기 버전에서는 아래 코드를 문제없이 지원했으나, 최근 버전에서는 세밀해졌다. 

@Test
public void formatterTest() {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd MMM uuuu");
String anotherDate = "04 Aug 2015";
LocalDate parsedLocalData = LocalDate.parse(anotherDate, dateTimeFormatter);// 에러 발생
System.out.println(anotherDate + " parses to " + parsedLocalData);
}

Exception

java.time.format.DateTimeParseException: Text '04 Aug 2015' could not be parsed at index 3

at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1947)

at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1849)

at java.time.LocalDate.parse(LocalDate.java:400)




해결을 위해서는 Pattern에서 Local 정보를 추가해야 Exception이 발생하지 않는다. 

@Test
public void formatterTest() {

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd MMM uuuu").withLocale(Locale.ENGLISH);
String anotherDate = "04 Aug 2015";
LocalDate parsedLocalData = LocalDate.parse(anotherDate, dateTimeFormatter);
System.out.println(anotherDate + " parses to " + parsedLocalData);
}

결과 

04 Aug 2015 parses to 2015-08-04


Posted by '김용환'
,