2015-04-29 11 views
9

Próbuję datę w formacie ISO8601 analizowania:Java 8 Data i czas API - zanalizować rrrr-mm-dd'T'GG: mm: ss.SSSZ

rrrr-mm-dd'T” HH: mm: ss.SSSZ

Czy mam rację, że nie jest możliwe, aby analizować je z którymś z domyślnych formatów określonych w java.time.format.DateTimeFormatter?

Na przykład będzie ISO_OFFSET_DATE_TIME analizować tylko:

rrrr-mm-dd'T'GG: mm: ss.SSSZZ

próbek:

yyyy-MM-dd'T'HH:mm:ss.SSSZ 
2015-04-29T10:15:00.500+0000 

yyyy-MM-dd'T'HH:mm:ss.SSSZZ 
2015-04-29T10:15:00.500+00:00 

BTW: Wiem mogę zdefiniować mój własny formatter, który nie jest problemem. Po prostu chciałem, aby upewnić się, że nie jestem czegoś brakuje jak ISODateTimeFormat z Joda jest w stanie analizować zarówno:

org.joda.time.format.DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateTime(); 
DateTime dateTime = dateTimeFormatter.parseDateTime("2015-04-29T10:15:00.500+0000"); 
+0

Można ustawić własny dateFormatter –

+0

Dokumentacja nie jest jasne, o różnicy między Z i ZZ - można dać jakiś przykładowy tekst, który próbujesz analizować że nie robi Czy analizować z ISO_OFFSET_DATE_TIME? (Wygląda na to, że jest bardziej podobny do ZZZZZ niż ZZ, ponieważ zawiera dwukropek.) –

+2

Okazuje się, że definiowanie formantu java.time, który może parsować oba, nie jest proste. – bowmore

Odpowiedz

4

Jesteś rację, że nie wydaje się, aby dopasować każdy z formatów domyślnych więc musisz zbudować swój format za pomocą java.time.format.DateTimeFormatterBuilder.

+0

Jak mi smutno, wiem, że mogę zdefiniować własny format, który jest w stanie parsować rrrr-MM-dd'T'HH: mm: ss.SSSZ, co nie jest tutaj problemem. Chcę format, który jest w stanie przeanalizować zarówno "Z" i "ZZ", najlepiej domyślny, który jest dostarczany w java.time.format. * Gdzieś – vehovmar

1

Joda używa formatu ISO8601 jako domyślnego ISODateTimeFormat. W oparciu o dokument http://www.w3.org/TR/NOTE-datetime, Joda nie będzie w stanie przeanalizować Twojego formatu.

+1

Możesz spróbować sam Joda jest w stanie go sparsować. – vehovmar

+0

Zobacz moją odpowiedź, oczywiście Joda/java.util.time można utworzyć DateTimeFormatter, który jest w stanie analizować podany format. – llogiq

+0

dziękuję za poinformowanie mnie o tym –

3

Nie jestem pewien, czy jest to oczekiwana odpowiedź.

Metoda 1

Analizować za pomocą błyskawiczne

Instant.parse("2015-06-28T10:13:14.743Z"); 

Metoda 2

Dany format wejściowy jest równoważna formie ISO_DATE_TIME po usunięciu 'Z' z danym rr wzór -MM-dd'T'HH: mm: ss.SSSZ

Wtedy możemy analizować je za pomocą ISO_DATE_TIME

text = "2015-06-28T10:13:14.743" 
LocalDateTime.parse(text,DateTimeFormatter.ISO_DATE_TIME)