Java中的日期比较

时间:2011-12-28 23:45:31

标签: java jsp date

我正在尝试将两个日期与当前日期进行比较。当我试图知道日期是否与当前日期相同时,它似乎无法工作。这是我在代码中所做的事情:

//BeginDate is set earlier

Date myDate= new SimpleDateFormat("dd/MM/yyyy").parse(BeginDate);
Date now = new Date();

    System.out.println("Now : " + now);
    System.out.println("myDate : " + myDate);
    System.out.println("equals : " + myDate.equals(now));
    System.out.println(myDate.compareTo(now));

我在控制台中得到了这个:

Now : Thu Dec 29 00:28:45 CET 2011
myDate : Thu Dec 29 00:00:00 CET 2011
equals : false
-1

第一次比较应该返回true而第二次“0”是否正确?或者我错过了什么?

5 个答案:

答案 0 :(得分:5)

将日期与equals()或compareTo()进行比较,比较时间(小时,分钟,秒,毫秒)以及日期。您的测试失败,因为myDate今天是午夜,而now比此晚一点。

答案 1 :(得分:1)

您的比较失败,因为您需要立即格式化,以便两个日期具有相同的格式,因此可以进行比较。

或者,如果您愿意,可以将日期转换为字符串并执行比较:

    String beginDate = "28/12/2011";
    Calendar now = Calendar.getInstance();
    DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    String nowStr = df.format(new Date());
    System.out.println("equals : " + beginDate.equals(nowStr));

答案 2 :(得分:0)

您是否在创建日期时指定了毫秒数?如果你是,不要。因此,在更早创建日期时,仅指定日,小时等,而不是秒/毫秒。

然后,分别更改SimpleDateFormat。 “应该”有效。

答案 3 :(得分:0)

Java中的

日期对象只是一个数字,表示自1970年1月1日00:00:00 GMT以来的毫秒数。它没有任何称为日,月,月,年等的属性。这是因为日期,月份,年份根据日历和时区的类型而有所不同。这些属性属于 Calendar 实例。

因此,如果您有2个日期对象,并且想要比较月,月和年的日期,则应创建相应的日历实例并单独进行比较。< / p>

// Parse begin date
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date beginDate = dateFormat.parse(beginDateAsString);
// Create calendar instances
Calendar beginDateCalendar = Calendar.getInstance();
beginDateCalendar.setTime(beginDate);
Calendar todayCalendar = Calendar.getInstance();
// Check Equals
boolean dayEquals = todayCalendar.get(Calendar.DAY_OF_MONTH) == beginDateCalendar
        .get(Calendar.DAY_OF_MONTH);
boolean monthEquals = todayCalendar.get(Calendar.MONTH) == beginDateCalendar
        .get(Calendar.MONTH);
boolean yearEquals = todayCalendar.get(Calendar.YEAR) == beginDateCalendar
        .get(Calendar.YEAR);
// Print Equals
System.out.println(dayEquals && monthEquals && yearEquals);

以上代码对于当前问题来说很麻烦,但解释了如何在JAVA中完成日期操作。

如果你只是想解决你提到的平等问题,那么下面的代码就足够了:

String todayAsString = (new SimpleDateFormat("dd/MM/yyyy")).format(new Date());
System.out.println(beginDateAsString.equals(todayAsString));

答案 4 :(得分:0)

如果你只是要处理1900年到2100年之间的日期,那么有一个简单的计算方法可以给你自1900年以来的天数:

public static int daysSince1900(Date date) {
    Calendar c = new GregorianCalendar();
    c.setTime(date);

    int year = c.get(Calendar.YEAR) - 1900;
    int month = c.get(Calendar.MONTH) + 1;
    int days = c.get(Calendar.DAY_OF_MONTH);

    if (month < 3) {
        month += 12;
        year--;
    }
    int yearDays = (int) (year * 365.25);
    int monthDays = (int) ((month + 1) * 30.61);

    return (yearDays + monthDays + days - 63);
}

因此,可以通过检查两个日期中1900年以来的天数是否相等来实现日期(仅)比较。

注意:上面的方法应该添加代码以检查日期是否超出有效范围(1/1/1900 - 31/12/2099)并抛出IllegalArgumentException。

不要问我这个计算的来源,因为我们从90年代初就开始使用它。