如何将日期字符串从JSON转换为时间跨度

时间:2019-04-29 02:23:30

标签: java android json simpledateformat

我从JSON响应中获得的时间值的格式为"sun dd/mm/yyyy - HH:mm",我想将其转换为时间跨度(10分钟前,2天前...)。为此,我做了一个方法,将给定的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 个答案:

答案 0 :(得分:2)

我是新来的,希望能为您提供帮助。

我注意到的第一件事是'Z之后没有右引号:

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

此外,问题在于“ currentDateFormat”没有描述正确的日期输入格式,这导致它无法正确解析。如果输入的是“ sun dd / MM / yyyy-HH: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);应该能够正确解析,并且“日期”将不具有“空”值。

希望这会有所帮助。