2013-03-19 25 views
5

Podążyłem za kilkoma innymi rozwiązaniami na tej stronie do tego dylematu i nie mam zainstalowanego Joda Time, ale wciąż nie rozumiem, dlaczego to się nie udaje.Nie można odczytać daty używając DateFormat.parse()

Próbowałem również usunąć dwukropki, jak jedno rozwiązanie stwierdził, ale to nie pomogło.

currentNode.getProperty("jcr:created").getString() = 2013-03-07T11: 57: 08.596-05: 00

otrzymuję ten błąd: java.text.ParseException: Unparseable datę: „2013-03-07T11: 57: 08,596 -05: 00"

<%@page import=" 
    java.util.Date, 
    java.text.SimpleDateFormat, 
    java.text.DateFormat" 
%> 
<% 
    DateFormat outputFormat = new SimpleDateFormat("MMMM dd, yyyy"); 
    DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
    String currentDate = currentNode.getProperty("jcr:created").getString(); 
    Date date = inputFormat.parse(currentDate); // <-- Failing here 
    String currentDateString = outputFormat.format(date); 
%> 
+2

Powiązane: http://stackoverflow.com/a/2202300/738746 –

Odpowiedz

12

czas strefa formatowany jako Z powinny być -0500 nie -05:00.

Więc sugeruję, aby zastąpić

DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 

z

DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX"); 

Zobacz SimpleDateFormat's javadoc więcej szczegółów na temat dostępnych formatów.

Jeśli twój jdk nie zezwala na wzorzec X, musisz poprawić ciąg wejściowy, aby usunąć :. Można to zrobić za pomocą regex:

currentDate = currentDate.replaceAll(":(\\d\\d)$", "$1") 
+0

java.lang.IllegalArgumentException: Nielegalny wzór znaku "X" –

+0

Jaki jest twój JDK? Testowałem to z Javą 7 i działa dobrze. –

+6

Wzór 'X' jest nowy dla Javy 7. – Perception

0

Choć pytanie to zostało odebrane, istnieje alternatywny sposób, aby osiągnąć rozwiązanie, jeśli wymogiem jest tylko do wyświetlania daty utworzenia w formacie „MMMM dd, yyyy ".

Istnieje metoda getDate() dla obiektu Property, który zwraca obiekt kalendarza, z którego można uzyskać obiekt daty za pomocą metody getTime().

Powyższy fragment kodu zadziała, jeśli zostanie ponownie napisany, jak pokazano poniżej.

<%@ page import="java.util.Calendar, 
    java.text.SimpleDateFormat, 
    java.text.DateFormat" %> 
<% 
DateFormat outputFormat = new SimpleDateFormat("MMMM dd, yyyy"); 
Calendar currentDate = currentNode.getProperty("jcr:created").getDate(); 
String currentDateString = outputFormat.format(currentDate.getTime()); %> 

Zatem byłoby wyeliminować konieczność konwersji String do tej pory, a następnie wykonywanie pozostałych czynności. Mam nadzieję że to pomoże.

1

Po przetestowaniu rozwiązania przez pijanego bot, widzę, że strefa czasowa z pół godziny nie działa, jak -0530 (India).

Więc ulepszona odpowiedź jest zatem:

DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); 

Uwaga dodana XX u koniec, teraz również minuty są brane pod uwagę.

Powiązane problemy