2015-08-31 24 views
0

如何比较不带时间戳的日期使用公历? 在下面提供的示例中,两个结果都必须是true如何使用公历日历比较没有时间戳的日期?

package com.tutorialspoint; 

import java.util.*; 

public class GregorianCalendarDemo { 

    public static void main(String[] args) { 

    // create a new calendar 
    GregorianCalendar cal1 = 
    (GregorianCalendar) GregorianCalendar.getInstance(); 

    // print the current date and time 
    System.out.println("" + cal1.getTime()); 

    // create a second calendar equal to first one 
    GregorianCalendar cal2 = (GregorianCalendar) (Calendar) cal1.clone(); 

    // print cal2 
    System.out.println("" + cal2.getTime()); 

    // compare the two calendars 
    System.out.println("Cal1 and Cal2 are equal:" + cal1.equals(cal2)); 

    // change cal 2 a bit 
    cal2.add(GregorianCalendar.MINUTE, 5); 

    // compare the two calendars 
    System.out.println("Cal1 and Cal2 are equal:" + cal1.equals(cal2)); 

    } 
} 
+0

@Jens:我试过compareTo和equal。但是,我意识到等于使用时间戳。这就是为什么我要问如何忽略它。 –

+0

你为什么比较日历? –

+0

您必须编写自己的比较方法。 – Jens

回答

4

假设cal1cal2具有相同的时区(即cal1.getTimeZone().equals(cal2.getTimeZone())),可以使用下面的代码只比较日期:

cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) && 
cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR) 
1

既然你是比较使用equals两个实例,他们可以,如果他们代表完全一样的时间戳仅是相等的。请参阅java.util.GregorianCalendar#equals Javadoc:

将此GregorianCalendar与指定的Object进行比较。当且仅当参数是一个GregorianCalendar对象时,结果为true,该对象表示与此对象具有相同日历参数和公历更改日期下的相同时间值(与Epoch的毫秒偏移量)。

因此,在将cal2的值更改为不同的值后,它永远不会等于cal1

0

如果要比较日期使用下面的代码:

// compare the two dates 
System.out.println("Date1 and date2 are equal:" + cal1.getTime().equals(cal2.getTime()));