Java 如何使用公历比较没有时间戳的日期?

Java 如何使用公历比较没有时间戳的日期?,java,gregorian-calendar,Java,Gregorian Calendar,如何使用公历比较没有时间戳的日期? 在下面提供的示例中,两个结果都必须true package com.tutorialspoint; import java.util.*; public class GregorianCalendarDemo { public static void main(String[] args) { // create a new calendar GregorianCalendar cal1 = (GregorianCalenda

如何使用公历比较没有时间戳的日期? 在下面提供的示例中,两个结果都必须
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));

   }
}

由于使用
equals
比较这两个实例,因此只有当它们表示完全相同的时间戳时,它们才能相等。请参阅Javadoc:

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


因此,当您将
cal2
的值更改为不同的值后,它永远不能等于
cal1

,因为您使用
equals
来比较这两个实例,只有当它们表示完全相同的时间戳时,它们才能相等。请参阅Javadoc:

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


因此,将
cal2
的值更改为其他值后,如果要比较日期,请使用以下代码,该值永远不能等于
cal1

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

如果要比较日期,请使用以下代码:

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

假设
cal1
cal2
具有相同的时区(即
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)

假设
cal1
cal2
具有相同的时区(即
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)

@詹斯:我试过比较和平等。然而,我意识到equal使用的是时间戳。这就是为什么我要问如何忽略它。为什么要比较日历?您必须编写自己的比较方法。如果不想创建自己的方法,只需将小时、分钟和秒设置为0,然后进行比较。或者只使用
Date
,这@Jens:我尝试了compareTo和equal。然而,我意识到equal使用的是时间戳。这就是为什么我要问如何忽略它。为什么要比较日历?您必须编写自己的比较方法。如果不想创建自己的方法,只需将小时、分钟和秒设置为0,然后进行比较。或者只需使用
日期
,即可