Convertendo String compatível com ISO 8601 para java.util.Date

Estou tentando converter umISO 8601 String formatada para umjava.util.Date.

Eu encontrei o padrãoyyyy-MM-dd'T'HH:mm:ssZ para ser compatível com ISO8601 se usado com uma localidade (comparar amostra).

No entanto, usando ojava.text.SimpleDateFormat, Não consigo converter a String formatada corretamente2010-01-01T12:00:00+01:00. Eu tenho que convertê-lo primeiro para2010-01-01T12:00:00+0100, sem os dois pontos.

Então, a solução atual é

SimpleDateFormat ISO8601DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.GERMANY);
String date = "2010-01-01T12:00:00+01:00".replaceAll("\\+0([0-9]){1}\\:00", "+0$100");
System.out.println(ISO8601DATEFORMAT.parse(date));

o que obviamente não é legal. Estou faltando alguma coisa ou há uma solução melhor?

Responda

Graças ao comentário de JuanZe, encontrei oJoda-Time magia também édescrito aqui.

Então, a solução é

DateTimeFormatter parser2 = ISODateTimeFormat.dateTimeNoMillis();
String jtdate = "2010-01-01T12:00:00+01:00";
System.out.println(parser2.parseDateTime(jtdate));

Ou, mais simplesmente, use o analisador padrão por meio do construtor:

DateTime dt = new DateTime( "2010-01-01T12:00:00+01:00" ) ;

Para mim, isso é legal.

questionAnswers(25)

yourAnswerToTheQuestion