2015-05-06 45 views
6

Używając jdk1.7.0_55, otrzymuję parseposition.errorIndex jako 0 w przypadku, gdy strefa czasowa nie jest standardowa.SimpleDateFormat.parse zwraca errorIndex jako 0

Ale używając jdk1.6.0_38 Dostaję parseposition.errorIndex jako 21 na tym samym formacie czasowej złym

Poniżej próbka:

String date = "13 Jan 2005 21:45:34 ABC"; 
String format = "dd MMM yyyy HH:mm:ss z"; 
ParsePosition pp = new ParsePosition(0); 
pp.setIndex(0); 
SimpleDateFormat sd = new SimpleDateFormat(format,Locale.ENGLISH); 
Date d = sd.parse(date,pp); 
System.out.println("Error Index "+pp.getErrorIndex()); 

Wynik Korzystanie z JDK 6:

Indeks błędów 21

Wynik Korzystanie z jdk 7

Index Error 0

Dlaczego istnieje różnica w nim?

Proszę pomóc

+1

Mogę to odtworzyć. Oczywiście regresja. Możesz wysłać tę wiadomość jako błąd do OpenJDK. –

+0

Nie powinno być, ale wydaje się, że jdk 6 podaje datę, a 7 podaje pp. –

+1

Oba wyrzucą wyjątek, jeśli użyję metody parse (date). W jdk 6 podaje indeks błędu jako poprawną pozycję, aw jdk 7 wskaźnik błędu jako 0. @TaylorCourtney – Roshan

Odpowiedz

2

Rzeczywiście jest to regresja. Nadal nie działa w najnowszej wersji Java 8. Publiczny moduł do śledzenia błędów OpenJDK go nie wymienia, dlatego zgłosiłem to firmie Oracle do przeglądu. Jest śledzony przez Oracle z identyfikatorem recenzji: JI-9021556

Niestety, nie ma sposobu, aby to naprawić.

+0

Nie daje to odpowiedzi na pytanie. Aby skrytykować lub poprosić o wyjaśnienie od autora, pozostaw komentarz pod swoim postem. – Marco13

+3

to jest odpowiedź. Odpowiedź brzmi: jest to regresja w JDK. –

+0

Ten komentarz jest automatycznie wstawiany podczas przeglądania. Nie mam zamiaru spierać się o subtelną różnicę między "wygląda jak ..." i "jest ...", ale może mógłbyś poszerzyć odpowiedź o wiarygodne informacje, np. link do raportu o błędzie. – Marco13