如何使用格里高利历来比较没有时间戳的日期?

时间:2015-08-31 11:56:34

标签: 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 = 
   (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));

   }
}

3 个答案:

答案 0 :(得分: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 :(得分:1)

由于您使用equals比较两个实例,因此只有它们代表完全相同的时间戳才能相等。请参阅java.util.GregorianCalendar#equals Javadoc:

  

将此GregorianCalendar与指定的Object进行比较。当且仅当参数是GregorianCalendar对象时,结果才为真,该对象在相同的Calendar参数和Gregorian更改日期下表示与此对象相同的时间值(与Epoch的毫秒偏移量)。

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

答案 2 :(得分:0)

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

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