我正在阅读具有String endDate的Person对象列表。在编写迭代器时,我有条件返回公司的活动用户。这意味着endDate应该在今天之前。所以当我这样做时:
String date = person.getEndDate();
Date endDate = null;
Date today = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("mm/dd/yyyy");
endDate = sdf.parse(date);
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(endDate);
cal2.setTime(today);
cal1.clear(Calendar.HOUR);
cal1.clear(Calendar.MINUTE);
cal1.clear(Calendar.SECOND);
cal1.clear(Calendar.MILLISECOND);
cal1.clear(Calendar.HOUR_OF_DAY);
cal2.clear(Calendar.HOUR);
cal2.clear(Calendar.MINUTE);
cal2.clear(Calendar.SECOND);
cal2.clear(Calendar.MILLISECOND);
cal2.clear(Calendar.HOUR_OF_DAY);
if (cal1 != null && cal1.before(cal2)) {
return person;
}else{
return null;
}
这将endDate设置为:Tue Jun 23 00:00:00 EDT 2015 但在撰写本文时,今天的日期变为:Tue Jun 23 12:09:01 EDT 2015
当比较cal1.before(cal2)时,这不会产生活动或非活动用户。在这种情况下比较最有效的方法是什么?有什么建议吗?
答案 0 :(得分:0)
您的日期格式错误。DateFormat m
表示分钟M
为月份,您还必须格式化当前日期以进行比较。
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Date today = sdf.parse(sdf.format(new Date()));
Date date2 = sdf.parse("06/25/2015");
System.out.println(date2.after(today));
答案 1 :(得分:0)
您似乎只想要整个Calendar对象中的日期。
您考虑过使用JodaTime
库吗?它提供了许多日期时间操作选项,也解决了线程安全问题。
使用JodaTime
,您的代码可以按如下方式重写:
以下是您可能需要的导入:
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
代码:
String date = person.getEndDate();
DateTime endDate = null;
DateTime today = new DateTime();
DateTimeFormatter dtf = DateTimeFormat.forPattern("MM/dd/yyyy");
endDate = dtf.parseDateTime(date);
LocalDate cal1 = endDate.toLocalDate();
LocalDate cal2 = today.toLocalDate();
if (cal1 != null && cal1.isBefore(cal2)) {
return person;
} else {
return null;
}
希望这有帮助!