Неразборчивая дата: «четверг, 9 января 2020 года; 04:31:59 вечера (время по Гринвичу +05: 30)» (по смещению 39) в Android 6,0 - PullRequest
1 голос
/ 09 января 2020

Я пытаюсь разобрать строку с датой, чтобы преобразовать ее в формат даты. Строки в следующем формате.

Четверг, 9 января 2020 г .; 04:31:59 PM (GMT +05: 30)

SimpleDateFormat sdf3 = new SimpleDateFormat("EEE, MMM dd yyyy; hh:mm:ss a",Locale.ENGLISH);

for(int i=0 ; i <jArr.length() ; i++){
    String tempDate = jArr.get(i).toString();
    dateList.add(tempDate);
}

try{
    Date d1 = sdf3.parse(dateList.get(0));                        
} catch (Exception e) {
    e.printStackTrace(); 
}

Примечание: эта функция работает нормально для android версии> 6.

Ответы [ 3 ]

2 голосов
/ 09 января 2020

Чтобы получить желаемый формат, вы должны использовать SimpleDateFormat, как показано ниже:

String dateString = "Thursday, Jan 09 2020; 04:31:59 PM (GMT +05:30)";
SimpleDateFormat sourceFormat = new SimpleDateFormat("EEE, MMM dd yyyy; hh:mm:ss a",Locale.ENGLISH);

try{
    Date d1 = sourceFormat.parse(dateString);                        
} catch (Exception e) {
    e.printStackTrace(); 
}

SimpleDateFormat targetFormat = new SimpleDateFormat("dd/MM/yy; hh:mm:ss a", Locale.ENGLISH)

String desiredString = targetFormat.format(d1);
//desiredString is now "09/01/20; 04:31:59 PM"
0 голосов
/ 10 января 2020

java .time и ThreeTenABP

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
            "EEEE, MMM dd uuuu; hh:mm:ss a '(GMT' xxx')'", Locale.ENGLISH);

    String tempDate = "Thursday, Jan 09 2020; 04:31:59 PM (GMT +05:30)";
    OffsetDateTime odt = OffsetDateTime.parse(tempDate, formatter);
    System.out.println(odt);

Выходные данные из этого фрагмента:

2020-01-09T16: 31: 59 + 05: 30

Чтобы получить правильное время, вам необходимо проанализировать смещение по Гринвичу в строке.

Я использую java .time, современный Java API даты и времени потому что SimpleDateFormat и Date плохо спроектированы и давно устарели, первые особенно печально известны своими проблемами. И поскольку java .time намного приятнее работать.

Вопрос: Разве java .time не требует Android API уровня 26?

java .time прекрасно работает как на старых, так и на новых Android устройствах. Для этого требуется как минимум Java 6 .

  • В Java 8 и более поздних версиях, а также на более новых Android устройствах (от уровня API 26) современный встроенный API -in.
  • В не- Android Java 6 и 7 получите ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. ссылки внизу).
  • Вкл. (Старше) Android Используйте версию Android ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из org.threeten.bp с подпакетами.

Ссылки

0 голосов
/ 09 января 2020

Попробуйте этот EPOCH_FORMAT в аргументах SimpleDateFormat:

String formatter = "EE MMM dd HH:mm:ss z yyyy";
SimpleDateFormat sdf = new SimpleDateFormat(formatter,Locale.US);
...