Joda время конвертировать запрос

1

Как конвертировать с "2014-06-16T07: 00: 00.000Z" в "16-Янв-14 07:00:00", используя API-интерфейс joda?

Приведенный ниже код бросает исключение

java.lang.IllegalArgumentException: Illegal pattern component: T
    at org.joda.time.format.DateTimeFormat.parsePatternTo(DateTimeFormat.java:570)
    at org.joda.time.format.DateTimeFormat.createFormatterForPattern(DateTimeFormat.java:693)
    at org.joda.time.format.DateTimeFormat.forPattern(DateTimeFormat.java:181)
    at com.joda.JodaTimeTest.convertJodaTimezone(JodaTimeTest.java:59)
    at com.joda.JodaTimeTest.main(JodaTimeTest.java:50)

Это код:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-ddTHH:mm:ssZ");
    DateTime dt = formatter.parseDateTime(dstDateTime.toString());
Теги:
jodatime

2 ответа

4

Вы должны заключить литерал T в одинарные кавычки. Также миллисекунды не имеют правильной структуры. Вам нужно включить SSS в миллисекундах. Посмотрите на шаблоны здесь для получения дополнительной информации.

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

Обновление. Чтобы отформатировать DateTime в представлении String по вашему выбору, вам нужно сделать это.

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
DateTime dt = formatter.parseDateTime(dstDateTime.toString()); // You get a DateTime object

// Create a new formatter with the pattern you want
DateTimeFormatter formatter2 = DateTimeFormat.forPattern("dd-MMM-yy HH:mm:ss");
String dateStringInYourFormat = formatter2.print(dt); // format the DateTime to that pattern
System.out.println(dateStringInYourFormat); // Prints 16-Jun-14 12:30:00 because of the TimeZone I'm in

Либо укажите часовой пояс самостоятельно, либо часовой пояс вашей системы по умолчанию.

  • 0
    Спасибо за обновление, но получаем это исключение java.lang.IllegalArgumentException: неверный формат: "2014-06-16T07: 00: 00.000Z" искажен в ".000Z"
  • 0
    Теперь он работает нормально, но небольшая проблема, вывод добавляет «-07: 00» в конце 2014-06-16T00: 00: 00.000-07: 00, что мне не нужно. Как это решить?
1

Вам нужно изменить

"yyyy-MM-ddTHH:mm:ssZ"

к

"yyyy-MM-dd'T'HH:mm:ss.SSS'Z"

Теперь

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z");
DateTime dt = formatter.parseDateTime("2014-06-16T07:00:00.000Z");
System.out.println(dt);

Вывод:

2014-06-16T07:00:00.000+05:30
  • 0
    Спасибо за обновление, но получаем это исключение java.lang.IllegalArgumentException: неверный формат: "2014-06-16T07: 00: 00.000Z" искажен в ".000Z"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню