2014-09-23 88 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)