Jestem trochę zniechęcony z datami analizowania w Java 8 Time API.Java 8 Time API: jak przetworzyć ciąg formatu "MM.yyyy" na LocalDate
Wcześniej mogłem napisać:
String date = "04.2013";
DateFormat df = new SimpleDateFormat("MM.yyyy");
Date d = df.parse(date);
Ale teraz, jeśli mogę użyć LOCALDATE i zrobić to tak:
String date = "04.2013";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM.yyyy");
LocalDate ld = LocalDate.parse(date, formatter);
Otrzymuję wyjątek:
java.time.format.DateTimeParseException: Text '04' could not be parsed at index 0
java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1948)
java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1850)
java.time.LocalDate.parse(LocalDate.java:400)
java.time.LocalDate.parse(LocalDate.java:385)
com.luxoft.ath.controllers.JsonController.region(JsonController.java:38)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:483)
org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
Jeśli zmienię format ciągu na "rrrr-MM-dd" wszystko działa idealnie, nawet bez formater:
String date = "2013-04-12";
LocalDate ld = LocalDate.parse(date);
Więc moje pytanie brzmi: jak data w formacie niestandardowym wykorzystaniem Java 8 Czas API analizować?
to ma sens. Jeśli reprezentujesz tylko rok i miesiąc (dokładna data nie ma znaczenia), musisz tylko pracować z 'YearMonth'. Nie musisz konwertować go na 'LocalDate' w przeciwieństwie do pre-Java8, gdzie musieliśmy przekonwertować go na * domyślną * datę' 1'. ':)' – ADTC
@ADTC Rzeczywiście edytowałem, aby wyjaśnić. – assylias
Możesz zrobić 'LocalDate ld = ym.atEndOfMonth();' zbyt. Poważnie, Java 8 Time API (JodaTime) jest niesamowite ':)' – ADTC