比较RecyclerView中JSON结果的两个日期

时间:2018-05-14 09:36:49

标签: android datetime android-recyclerview android-databinding

我有一个 recyclerView ,它将根据使用数据绑定的JSON结果填充,我想要做的是检查/比较开始日期&过期日期,以查看" Deals"已过期(如果已过期,则带有文本&#34的文本视图;将显示已过期"

"DealsPageInfo": [
    {
      "DisplayName": "string",
      "StartDate": "2018-04-27T03:06:18.890Z",
      "ExpiredDate": "2018-04-27T03:06:18.890Z",
      "Url": "string",
      "ImageUrl": "string",
      "ShortDescription": "string"
    }

以下是我的一些问题:
*我应该使用DATE / String来存储对象吗?
*我应该在哪里执行此操作?在我的片段/适配器下?
感谢是否提供了任何来源/示例。

<TextView
      android:id="@+id/list_offers_startDate"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginRight="3dp"
      android:text="@{offers.StartDate}"
      android:textColor="@color/colorGrayText"
      android:textSize="@dimen/list_fontsize"
      />

 <TextView
      android:id="@+id/list_offers_endDate"
      android:visibility="gone"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginLeft="3dp"
      android:text="@{offers.ExpiredDate}"
      android:textColor="@color/colorGrayText"
      android:textSize="@dimen/form_fontsize"
      />

5 个答案:

答案 0 :(得分:0)

  

我应该使用DATE / String来存储对象吗?

是的,你必须在Date或string中保存这两个值。

  

我应该在哪里执行此操作?在我的片段/适配器下?

您必须在适配器中执行此功能。填充要查看的数据。

比较日期:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date StartDate= sdf.parse(StartDate);
Date ExpiredDate= sdf.parse(ExpiredDate);
if (StartDate.after(ExpiredDate)) {
    //create your logic here
}

希望它能帮到你!!

答案 1 :(得分:0)

您可以使用时间戳来执行此类时间检查。在json中发送开始和结束时间戳。您可以在适配器中执行此操作。

答案 2 :(得分:0)

是的,我认为您应该使用Date来表示开始日期和其他日期,这更有意义。

我认为您的适配器/视图是进行此转换的最佳位置。您应该让解析器为您执行此操作,或者您可以在从网络中取出对象后对List对象执行一些后期处理。最好甚至在后台线程上。

String中的Date解析为Adapter中的RecyclerView有点浪费,可能会使create-react-app有点滞后。它将导致重复计算相同的值,并可能在UI线程上解析冗长的日期。

答案 3 :(得分:0)

*我应该在哪里执行此操作?在我的片段/适配器下? 在适配器的onBindViewHolder中执行此操作,

public boolean isDateExpired(String startDate, String endDate) {
    SimpleDateFormat dfDate = new SimpleDateFormat("dd-MM-yyyy");
    boolean b = false;
    try {
        if (dfDate.parse(startDate).before(dfDate.parse(endDate))) {
            return true;  // If start date is before end date.
        } else if (dfDate.parse(startDate).equals(dfDate.parse(endDate))) {
            return false;  // If two dates are equal.
        } else {
            return false; // If start date is after the end date.
        }
    } catch (ParseException e) {
        e.printStackTrace();
        return false;
    }
}

在适配器中添加此方法,

$data = $this->pageRepository->getMenu(1);
$this->cObj = $GLOBALS['TSFE']->cObj;
$retval = array();

foreach ($data as $key => $row)
{
    $pageUid = $row['uid'];
    $conf = array('parameter'=>$pageUid, 'returnLast'=>'url');
    $uri = $this->cObj->typoLink('', $conf);
    array_push($retval, array('title' => $row['title'], 'url' => $uri));
}

答案 4 :(得分:0)

  • 首先,如果您希望将textview文本更改为“DEALS EXPIRED”,则应在适配器下执行操作。
  • 如果您不想再次使用解析字符串,则可以将日期存储为Date对象。

您可以像这样解析日期。

Instant instant = Instant.parse( "2018-04-27T03:06:18.890Z" );
Date date = java.util.Date.from( instant );
if ( Calendar.getInstance().after( date ) ) {
    // if this statement is true deal is expired.
}