在java中比较String日期和Date对象的最佳方法是什么?

时间:2015-06-23 16:34:47

标签: java string list date iterator

我正在阅读具有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)时,这不会产生活动或非活动用户。在这种情况下比较最有效的方法是什么?有什么建议吗?

2 个答案:

答案 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;
        }

希望这有帮助!