2014-09-23 36 views
0

我有一个ArrayList<CustomObject>其中包含一些条目。每个条目都有一个与之相关的日期。目前,日期被存储为一个字符串。例如"2014-09-23T12:45:00"根据当前日期筛选器列表android

我想筛选列表以获取包含仅今天完成的条目的精炼列表。

Iam使用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))); 

回答

0

这里的问题在于你格式化。

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

将其更改为

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

修复该imediate问题。但是,我可以推荐你不处理日期的字符串表示,而是改变你的代码直接处理日历?

例如,有你StatusResponse.getStartTime方法返回一个Calendar代表的开始时间,有你的ArticleFilter构造采取Calendar代表一天进行过滤,并让您的apply方法检查两个日历的get(Calendar.YEAR)和返回相同的值get(Calendar.DAY_OF_YEAR)