根据当前日期android过滤列表

时间:2014-09-23 07:19:35

标签: java android regex

我有ArrayList<CustomObject>,其中包含一些条目。每个条目都有一个与之关联的日期。目前,日期存储为String。例如"2014-09-23T12:45:00"

我想过滤列表以获得包含仅在今天完成的条目的精炼列表。

我使用Pattern来实现这一目标。但目前Iam在过滤后收到空列表。

这是我的代码: -

public class ArticleFilter implements Predicate<StatusResponse>
{
    private final Pattern pattern;

    public ArticleFilter(final String regex)
    {
        pattern = Pattern.compile(regex);
    }

    @Override
    public boolean apply(final StatusResponse input)
    {
        String dateString =  input.getStartTime();

        dateString =  dateString.split("T")[0]; // Getting date only
        return pattern.matcher(dateString).find();
    }
}

Main.java

Calendar currentDate = Calendar.getInstance(); //Get the current date
            SimpleDateFormat formatter= new SimpleDateFormat("yyyy/MM/dd"); //format it as per your requirement
            String dateNow = formatter.format(currentDate.getTime());
            ArrayList<StatusResponse> filteredResultList = Lists.newArrayList(Collections2.filter(resultList, new ArticleFilter(dateNow)));

1 个答案:

答案 0 :(得分:0)

这里的问题在于格式化程序。

您已指定&#34; yyyy / MM / dd&#34;的SimpleDateFormat,但您告诉我们您的日期存储为字符串格式为&#34; 2014-09-23T12:45:00& #34 ;.您需要更改SimpleDateFormat以匹配StatusResponse类中日期字符串的格式。

将其更改为

SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd");

这解决了中间问题。但是,我是否可以建议您根本不处理日期的字符串表示,而是更改您的代码以直接处理日历?

例如,让您的StatusResponse.getStartTime方法返回表示开始时间的Calendar,让ArticleFilter构造函数使用Calendar表示要过滤的日期,并且您的apply方法会检查两个日历是否为get(Calendar.YEAR)get(Calendar.DAY_OF_YEAR)

返回相同的值