2013-07-18 2 views
9

я преобразовал DateString формата YYYY-mm-DD HH:MM:SS в моей JSON и сохранялось на POJO, используя кодКак разобрать Joda время этого формата

DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); 
this.startDate = format.parseDateTime(startDate); 

Когда я конвертировать POJO обратно в формат JSON, дата записывается как 2013-07-12T18:31:01.000Z.
Как мы анализируем строку времени 2013-07-12T18:31:01.000Z назад к объекту JodaDateTime. Какой должен быть форматтер.
я YYYY-mm-DD HH:MM:SS и это не сработало

+0

Почему вы не используете 'date' вместо отформатированная дата? Это избавит вас от всех проблем с форматированием. Вы должны форматировать дату как String для отображения пользователю. Программное обеспечение не должно заботиться о формате даты при обработке дат. – m0skit0

ответ

33

2013-07-12T18:31:01.000Z это стандартный формат даты ISO.
Вы можете использовать Standart Дата Joda времени форматтера ISODateTimeFormat::dateTime()
Пример:

String startDate = "2013-07-12T18:31:01.000Z"; 
    DateTime dt = ISODateTimeFormat.dateTime().parseDateTime(startDate); 

в этот день дела будут переведены на сегодняшний день в вашей временной зоне.
Если вы хотите игнорировать часовой пояс использовать UTC зону в форматировщиком:

String startDate = "2013-07-12T18:31:01.000Z"; 
    DateTime dt = ISODateTimeFormat.dateTime().withZone(DateTimeZone.UTC).parseDateTime(startDate); 
3

Вы должны добавить X к вашему шаблону. SimpleDateFormat API содержит полный список полей, которые вы можете использовать в DateFormat, включая X для «Часовой пояс ISO 8601».

по ISO 8601 временная зона определяется как

Число букв образца обозначает формат как для форматирования и синтаксического анализа следующим образом:

ISO8601TimeZone: 
     OneLetterISO8601TimeZone 
     TwoLetterISO8601TimeZone 
     ThreeLetterISO8601TimeZone 
OneLetterISO8601TimeZone: 
     Sign TwoDigitHours 
     Z 
TwoLetterISO8601TimeZone: 
     Sign TwoDigitHours Minutes 
     Z 
ThreeLetterISO8601TimeZone: 
     Sign TwoDigitHours : Minutes 
     Z 
1

API-интерфейс док не совсем ясно: один должен прочитать «X»

OneLetterISO8601TimeZone средства и выходы Вход TwoDigitHours или Z,

значит что-то вроде -05

TwoLetterISO8601TimeZone означает 'XX' и выходы Вход TwoDigitHours минут или Z,

значит что-то вроде -0500

и ThreeLetterISO8601TimeZone означает 'XXX' и выходы Вход TwoDigitHours: Протокол

значит что-то вроде -05: 00

Смежные вопросы