比较日期(不是时间)

时间:2014-03-20 17:28:36

标签: java

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

下面的代码生成一个解析异常,因为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;
}

谢谢!

4 个答案:

答案 0 :(得分:1)

为什么在已经拥有日期时解析字符串?

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

String justTheDate = df.format(new Date());

然后你可以使用equals()方法比较字符串来检查匹配。

编辑 - 顺便说一句,如果Java 8是一个选项(它在周二发布!),它的新DateTime功能将完全符合您的要求:http://docs.oracle.com/javase/tutorial/datetime/

答案 1 :(得分:0)

您的例外原因是escd.getCurrentFCESDate().toString()中的toString 提供另一种格式“MM / dd / yyyy”。 因此,请确保您的格式字符串在SimpleDateFormat(“MM / dd / yyyy”)中是正确的。 或者检查一下你是否可以直接从getCurrentFCESDate()获得年,月和日。

只需使用日历创建日期,您可以从现有日期获取年,月,日,但将小时,分钟,秒和毫秒设置为零。
结果将是Date对象:

这样的东西
firstSent.set(Calendar.HOUR, 0);
firstSent.set(Calendar.MINUTE, 0);
firstSent.set(Calendar.SECOND, 0);
firstSent.set(Calendar.MILLISECOND, 0);

然后使用before()和after()

答案 2 :(得分:0)

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

之后你可以比较这些数字。

但是,请在转换为数字之前使用时区调整。

答案 3 :(得分:0)

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

以我们今天到达不同日期的例子(从一个到另一个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 --> time 1 in millis 1395338536123 --> time 2 in millis 16149 --> time 1 / 86400000 16149 --> time 2 / 86400000 --> THE SAME