Я пытаюсь преобразовать отформатированную строку ISO 8601 в java.util.Date
.
Я обнаружил, что шаблон yyyy-MM-dd'T'HH:mm:ssZ
соответствует ISO8601, если используется с локалью (сравните пример).
Однако, используя java.text.SimpleDateFormat
, я не могу преобразовать правильно отформатированную строку 2010-01-01T12:00:00+01:00
. Сначала я должен преобразовать его в 2010-01-01T12:00:00+0100
, без двоеточия.
Итак, текущее решение -
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));
что, очевидно, не так приятно. Я что-то упустил или есть лучшее решение?
Ответ
Благодаря комментарию JuanZe я нашел магию Joda-Time, она также описана здесь.
Итак, решение
DateTimeFormatter parser2 = ISODateTimeFormat.dateTimeNoMillis();
String jtdate = "2010-01-01T12:00:00+01:00";
System.out.println(parser2.parseDateTime(jtdate));
Или, проще, используйте синтаксический анализатор по умолчанию через конструктор:
DateTime dt = new DateTime( "2010-01-01T12:00:00+01:00" ) ;
Для меня это приятно.