Я ожидаю, что тест ниже пройдет. Может ли кто-нибудь сказать мне, что я делаю неправильно здесь? Скорее всего, я использую неправильный шаблон, но я не вижу, что не так.Что я делаю неправильно при разборе даты ISO8601?
@Test
public void parseDateTest() {
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.sss'Z'");
DateTime dt = formatter.parseDateTime("1983-03-06T05:00:03.000Z");
assertEquals("1983-03-06T05:00:03.000Z", dt.toString());
}
FYI dt.toString() делает печать: 1983-03-06T05: 00: 00.000Z
Спасибо!
P.S. Обратите внимание: в этом фрагменте я полагаюсь на часовой пояс по умолчанию. Это не производственный код, и как правильно обрабатывать часовой пояс, основанный на потребностях, покрывается многими другими вопросами.
Часовой пояс по умолчанию определяется системным свойством user.timezone. Если это значение null или не является допустимым идентификатором, тогда значение JDK TimeZone по умолчанию преобразуется. Если это не удается, используется UTC.
FYI Я использую Joda DateTime в этом фрагменте. –
Вместо того, чтобы добавлять дополнительную информацию в качестве комментариев, отредактируйте вопрос. Если вы используете веб-браузер, найдите ссылку «изменить» ниже Вопроса, влево-влево. –
Кстати, нет необходимости в форматировании. Формат по умолчанию для метода 'toString' в' DateTime' является стандартным форматом [ISO 8601] (http://en.wikipedia.org/wiki/ISO_8601) в этом Вопросе: 'yyyy-MM-ddTHH: mm : ss.SSSZZ'. Передайте строку конструктору DateTime: 'new DateTime (" 1983-03-06T05: 00: 03.000Z ")'. Я бы также передал желаемый часовой пояс для назначения, а не полагаться неявно на текущий часовой пояс JVM: 'new DateTime (« 1983-03-06T05: 00: 03.000Z », DateTimeZone.forID (« Европа/Лондон »))' , –