我有一个ArrayList<CustomObject>
,其中包含一些条目。每个条目都有一个与之关联的日期。目前,该日期存储为字符串。例如"2014-09-23T12:45:00"
我想过滤列表,得到一个包含今天才完成的条目的精炼列表。
我正在使用Pattern
来实现这一点。但目前我在过滤后收到一个空列表。
这是我的代码:--
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)));
这里的问题在于格式化程序。
您指定了"yyyy/MM/dd"的SimpleDateFormat,但您告诉我们您的日期存储为字符串,格式为"2014-09-23T12:45:00"。您需要更改SimpleDateFormat以匹配StatusResponse类中日期字符串的格式。
将其更改为
SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd");
这立即解决了问题。但是,我可以建议您不要处理日期的字符串表示,而是将代码更改为仅直接处理日历吗?
例如,让您的StatusResponse.getStartTime
方法返回一个代表开始时间的Calendar
,让ArticleFilter
构造函数使用一个代表要筛选的日期的Calendar
,并让apply
方法检查两个日历是否为get(Calendar.YEAR)
和get(Calendar.DAY_OF_YEAR)
返回相同的值