Как преобразовать строку даты из JSON в промежуток времени - PullRequest
0 голосов
/ 29 апреля 2019

Значение времени, которое я получаю из ответа JSON, имеет формат "sun dd/mm/yyyy - HH:mm", и я хочу вместо этого преобразовать его в промежуток времени (10 минут назад, 2 дня назад ...).Для этого я создал метод, который преобразует данный String of dataTimeFormant в формат "X Hours Ago" и возвращает x hours ago в формате строки, после чего я могу поместить в textView.

Все кажется правильным, я думаю, ноПри запуске приложения происходит сбой с NullPonterException в строке моего кода, поэтому, возможно, я ошибся.

   @RequiresApi(api = Build.VERSION_CODES.N)
public String dateConverter(String dateStringFormat) {
    Date date = null;
    SimpleDateFormat currentDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss'Z");
    try {
        date = currentDateFormat.parse(dateStringFormat);
    } catch (ParseException e) {
        e.printStackTrace();
    }

    SimpleDateFormat requireDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String currentDate = requireDateFormat.format(date);

    long currentTimeInMilis = 0;

    try {
        Date currentDateObject = requireDateFormat.parse(currentDate);
        currentTimeInMilis = currentDateObject.getTime();
    } catch (ParseException e) {
        e.printStackTrace();
    }
    CharSequence timeSpanString = DateUtils.getRelativeTimeSpanString(currentTimeInMilis, System.currentTimeMillis(), DateUtils.MINUTE_IN_MILLIS);

    return timeSpanString.toString();
}

Мой метод onBindView адаптера:

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, final int i) {
  //...
  //...
  //...
        DateConvert converter = new DateConvert();
        String postTime = converter.dateConverter(this.news.get(i).getCreated());
        viewHolder.articleCreatedDate.setText(postTime);

    }

Ошибка logcat указывает на:

String currentDate = requireDateFormat.format(date);

и:

String postTime = converter.dateConverter(this.post.get(i).getCreated());

Я не могу найти причину, потому что, если я уберу вызов этой функции, все будет работать отлично, возможно, есть лучшие способы добиться этого?

Спасибо.

1 Ответ

2 голосов
/ 29 апреля 2019

Я новичок здесь, надеюсь, я могу помочь.

Первое, что я замечаю, нет заключительной одинарной кавычки после 'Z:

SimpleDateFormat currentDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss'Z'");

Кроме того, проблема в том, что«currentDateFormat» не отображает правильный формат ввода даты, что приводит к невозможности его правильного анализа.Если ввод "sun dd / MM / гггг - ЧЧ: мм", то формат должен быть:

SimpleDateFormat currentDateFormat = new SimpleDateFormat("EEE MM/dd/yyyy '-' HH:mm");

или

SimpleDateFormat currentDateFormat = new SimpleDateFormat("EEE MM/dd/yyyy - HH:mm");

Тогда date = currentDateFormat.parse(dateStringFormat); должен иметь возможность анализироватьправильно, и у "даты" не будет нулевого значения.

Надеюсь, это поможет.

...