ParseException: Unparseable date: среда, 30 марта, 00:00:00 по Гринвичу + 05:30 2016 (по смещению 4)

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

Ср 30 марта 00:00:00 GMT+05:30 2016

Но когда я разбираю строку, я получаю сообщение об ошибке:

java.text.ParseException: неразборчивая дата: «Среда, 30 марта, 00:00:00 по Гринвичу + 05:30 2016» (со смещением 4)

ниже приведена часть моего кода. Как мне избежать этой ошибки? Любая помощь будет оценена по достоинству.

SimpleDateFormat sdf3 = new SimpleDateFormat("EEE MM dd kk:mm:ss zzzz yyyy",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(); }

person Ryan Aluvihare    schedule 30.03.2016    source источник
comment
Как видите, ваш формат не соответствует данным, которые вы хотите разобрать MM, zzzz ? пожалуйста, прочитайте документацию   -  person Selvin    schedule 30.03.2016
comment
Я рекомендую вам не использовать SimpleDateFormat и Date. Эти классы плохо спроектированы и давно устарели, а первые, как известно, доставляют много хлопот. Вместо этого используйте DateTimeFormatter и либо OffsetDateTime, либо ZonedDateTime; все три взяты из java.time, современного API даты и времени Java. См. ответ Арвинда Кумара Авинаша.   -  person Ole V.V.    schedule 28.03.2021


Ответы (3)


Проверьте это один раз. работает нормально для меня

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

    Date d1 = null;
    try{
        d1 = sdf3.parse("Wed Mar 30 00:00:00 GMT+05:30 2016");

    }catch (Exception e){ e.printStackTrace(); }


    System.out.println("check..." + d1);
person Satya siva prasad    schedule 30.03.2016

java.время

java.util API даты и времени и их API форматирования SimpleDateFormat устарели и подвержены ошибкам. Рекомендуется полностью прекратить их использование и перейти на современный API даты и времени*.

Использование современного API даты и времени:

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        String strDateTime = "Wed Mar 30 00:00:00 GMT+05:30 2016";
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("E MMM d H:m:s O u", Locale.ENGLISH);
        OffsetDateTime odt = OffsetDateTime.parse(strDateTime, dtf);
        System.out.println(odt);
    }
}

Вывод:

2016-03-30T00:00+05:30

Узнайте больше о современном API даты и времени из Trail: Date Time< /а>.


* По какой-либо причине, если вам нужно придерживаться Java 6 или Java 7, вы можете использовать ThreeTen-Backport, который переносит большую часть функций java.time на Java 6 и 7. Если вы работаете над проектом Android и ваш уровень Android API по-прежнему не соответствует Java-8, проверьте Java 8+ API доступно через дешугаринг и Как использовать ThreeTenABP в Android Project.

person Arvind Kumar Avinash    schedule 28.03.2021

Ср 30 марта 00:00:00 GMT+05:30 2016
EEE MM дд kk:mm:ss zzzz yyyy

Ваши данные не соответствуют шаблону. Чтобы заставить его работать, обновите свой шаблон до

"EEE MMM dd kk:mm:ss zXXX yyyy"

PS: здесь есть удобный инструмент для проверки шаблонов.

person Dmitri Timofti    schedule 30.03.2016
comment
Спасибо за помощь. мне пришлось использовать HH вместо kk. спасибо и за инструмент. действительно ценю это. - person Ryan Aluvihare; 30.03.2016