2014-10-13 4 views
0

Я пытаюсь разобрать Дата "10/13/2014 08:06" Вот мой код:дата и время JodaTime разбора на Android

public static LocalDateTime parseDateTime(String dateAndTime) { 
    try { 
     if (dateAndTime.contains("-")) { 
      return LocalDateTime.parse(dateAndTime.toUpperCase(), DateTimeFormat.forPattern("yyyy-MM-dd hh:mm aa")); 
      //return DateTimeFormat.forPattern("yyyy-MM-dd hh:mm aa").parseDateTime(dateAndTime.toUpperCase()); 
     } else { 
      return LocalDateTime.parse(dateAndTime.toUpperCase(), DateTimeFormat.forPattern("MM/dd/yyyy hh:mm aa")); 
      //return DateTimeFormat.forPattern("MM/dd/yyyy hh:mm aa").parseDateTime(dateAndTime.toUpperCase()); 
     } 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

Мой парсер неудачу:

java.lang.IllegalArgumentException: Invalid format: "10/13/2014 08:06 AM" is malformed at "AM" 

Пожалуйста, помогите разобраться.

Я использую Android 4.4.4 и JodaTime 2,3

+0

Sidenote: Вместо этого я бы использовал SimpleDateFormat. Не нужно добавлять JodaTime. http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html – dannyroa

+0

Я использую его везде в своем проекте. Специально для расчетов, таких как plusHours – user3080265

+0

Есть Календарь и DateUtils для этого: http://developer.android.com/reference/android/text/format/DateUtils.html. – dannyroa

ответ

1

Я не знаю, что ваша локаль, но я могу воспроизвести вашу проблему с локалью как new Locale("hi", "IN") (моя собственная система локаль отличается). Таким образом, решение вашей проблемы заключается в том, чтобы указать языковой стандарт на английский, поскольку текст типа «AM» специфичен для локали и в основном используется на английском языке.

LocalDateTime ldt = 
    LocalDateTime.parse(
    dateAndTime.toUpperCase(), 
    DateTimeFormat.forPattern("MM/dd/yyyy hh:mm aa").withLocale(Locale.ENGLISH)); 
+0

Это было решение! Спасибо Мено! – user3080265

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