Java 只比较日期(而不是时间)

Java 只比较日期(而不是时间),java,Java,我需要将两个日期与第三个日期进行比较,忽略所有日期的时间部分 下面的代码生成一个解析异常,因为toString()方法返回类似“Wed Feb 26 00:00:00 EST 2014”的内容 有没有关于如何解决这个问题的建议 private boolean needToSendEmail(EmSelfCertEntity escd) throws ParseException { boolean sendEmail = false; DateFormat df

我需要将两个日期与第三个日期进行比较,忽略所有日期的时间部分

下面的代码生成一个解析异常,因为toString()方法返回类似“Wed Feb 26 00:00:00 EST 2014”的内容

有没有关于如何解决这个问题的建议

private boolean needToSendEmail(EmSelfCertEntity escd) throws ParseException {
        boolean sendEmail = false;

        DateFormat df = new SimpleDateFormat("MM/dd/yyyy");

        Date justTheDate = df.parse(escd.getCurrentFCESDate().toString());
        Calendar firstSent = Calendar.getInstance();
        firstSent.setTime(justTheDate);

        justTheDate = df.parse(new Date().toString());
        Calendar firstFollowUp = Calendar.getInstance();
        firstFollowUp.setTime(justTheDate);
        firstFollowUp.add(Calendar.DATE, -daysToFirstFollowUpEmail);

        Calendar secondFollowUp = Calendar.getInstance();
        secondFollowUp.setTime(justTheDate);
        secondFollowUp.add(Calendar.DATE, -daysToSecondFollowUpEmail);

        if ((firstSent.before(firstFollowUp) && escd.countEmailsSent <= 1)
                || (firstSent.before(secondFollowUp) && escd.countEmailsSent <= 2)) {

            sendEmail = true;
        }
    return sendEmail;
}
private boolean needToSendEmail(EmSelfCertEntity escd)引发异常{
布尔sendmail=false;
DateFormat df=新的简化格式(“MM/dd/yyyy”);
datejustTheDate=df.parse(escd.getCurrentFCESDate().toString());
Calendar firstSent=Calendar.getInstance();
第一次发送。设置时间(调整日期);
justTheDate=df.parse(new Date().toString());
Calendar firstFollowUp=Calendar.getInstance();
第一次随访。设定时间(JustheDate);
添加(Calendar.DATE,-daysToFirstFollowUpEmail);
Calendar secondFollowUp=Calendar.getInstance();
第二次随访。设定时间(正午);
添加(Calendar.DATE,-daysToSecondFollowUpEmail);

if((firstSent.before(firstFollowUp))和&escd.countEmailsSent既然已经有了日期,为什么还要解析字符串

如果要将现有日期格式化为指定的格式,请改用format()方法:

String justTheDate = df.format(new Date());
然后可以使用equals()方法比较字符串以检查匹配


编辑-顺便说一句,如果Java 8是一个选项(它在周二推出!),它的新DateTime功能将完全满足您的要求:

出现异常的原因是toString in
escd.getCurrentFCESDate().toString()
提供“MM/dd/yyyy”以外的其他格式。 因此,请确保SimpleDataFormat(“MM/dd/yyyy”)行中的格式字符串是正确的。 或者检查是否可以直接从getCurrentFCESDate()获取年、月和日

只需使用日历创建一个日期,从现有日期开始计算年、月、日,但将小时、分钟、秒和毫秒设置为零。
结果将是一个日期对象:

差不多

firstSent.set(Calendar.HOUR, 0);
firstSent.set(Calendar.MINUTE, 0);
firstSent.set(Calendar.SECOND, 0);
firstSent.set(Calendar.MILLISECOND, 0);

然后使用before()和after()

最简单的方法是将日期转换为以下格式的数字:
yyyyMMdd

然后你就可以比较这些数字了


但是,是的,请在转换为数字之前进行时区调整。

您可以以毫秒为单位计算时间,并用简单的/除法减去时间。 通过这种方式,您可以比较两个长,并检查一个是否比另一个大

以今天的不同日期为例(从一个到另一个的时间间隔为500毫秒),但如果除以86400000,则得到相同的数字

试试这个:

    public static void main(String[] args) throws Exception {
    Date d1= new Date();

    Thread.sleep(500);
    Date d2= new Date();

    final int MILLISECONDS = 1000;
    final int SECONDS = 60;
    final int MINUTES = 60;
    final int HOURS = 24;

    final long MILLI_PER_DAY= MILLISECONDS*SECONDS*MINUTES*HOURS;
    System.out.println(MILLI_PER_DAY);

    System.out.println(d1.getTime());
    System.out.println(d2.getTime());
    System.out.println(d1.getTime()/MILLI_PER_DAY);
    System.out.println(d2.getTime()/MILLI_PER_DAY);
}
您将看到最后两个条目是相同的:


1395338535623-->时间1(毫秒)
1395338536123-->时间2(毫秒)
16149-->时间1/86400000

16149-->时间2/86400000-->相同的

这里根本不清楚您的输入是什么…或者您感兴趣的时区。请记住,
日期
只是时间上的一个瞬间;它可能发生在世界各地的不同日子。如果您可以使用Joda time(或Java 8)这也会让您的生活更轻松。getCurrentFCESDate返回什么?Wich class?使用equals,您无法对前后进行比较。通常情况下,日期需要前后比较或<或>比较。我没有看到前后比较,但如果从字符串转换回日期,而没有任何与之相关的时间信息,那就很简单了。