使用equals比较java中的日期

时间:2013-10-12 18:18:28

标签: java date

* UPDATE *我的班级java.util.Date shippingDate中有一个实例,我需要比较它是否等于当前日期。

java.util.Date shippingDate ;
Calendar g = new GregorianCalendar();
shippingDate=g.getTime();
if(shippingDate.equals(new Date()))
{
System.out.println("Match found");
}

Equals在Date中被覆盖,因此它应该执行sysout.But它不打印任何内容。

PS#我不允许使用Joda Time库。

更新 - 有没有其他方法可以将shippingDate与当前日期进行比较。我不想使用SimpleDateFormat对当前日期进行硬编码。它必须从系统生成。

3 个答案:

答案 0 :(得分:5)

Javadoc给出了一个线索(强调我的):

  

public Date()

     

分配一个Date对象并对其进行初始化,使其代表分配时间测量到最接近的毫秒

答案 1 :(得分:1)

当您创建一个新的Date对象时,它会占用系统的当前时间,因此两个日期实际上在行之间传递的毫秒数不同

Calendar g = new GregorianCalendar();

if(shippingDate.equals(new Date()))

答案 2 :(得分:0)

您是否注意到您有两行并且在line 1获得日历对象并将其与line 2的日期对象进行比较,了解两者的执行时间之间存在毫秒差异所以它永远不会是一样的。

java.util.Date shippingDate ;
Calendar g = new GregorianCalendar(); //line 1
shippingDate=g.getTime();
if(shippingDate.equals(new Date())) //line 2
{
System.out.println("Match found");
}

如果您尝试比较在多个语句中创建的两个不同对象,结果将永远不会相等。


在更新中解决您的问题: 使用shippingDate.getTime()获取时间(以毫秒为单位)然后将其与系统时间使用System.currentTimeMillis()进行比较,或者您也可以使用System.nanoTime() ,但结果将永远不会相同