我有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)));
答案 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)