1

*更新*我的班级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。但它不打印任何东西。

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

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

4

3 回答 3

5

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

public Date()

分配一个Date对象并对其进行初始化,以便它表示分配它的时间精确到毫秒

于 2013-10-12T18:19:28.753 回答
1

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

Calendar g = new GregorianCalendar();

if(shippingDate.equals(new Date()))
于 2013-10-12T18:19:48.787 回答
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() ,但结果永远不会相同

于 2013-10-12T18:23:11.613 回答