2012-09-18 198 views
5

我需要能够比较两个日期,仅基于年份和月份(即不考虑当天),以及在JAVA和HQL。比较基于年份的两个日期,不考虑日期

假设我需要检查d1是否小于或等于d2。这里是我的尝试:

JAVA

calendar.setTime(d1); 
int y1 = calendar.get(Calendar.YEAR); 
int m1 = calendar.get(Calendar.MONTH); 
calendar.setTime(d2); 
int y2 = calendar.get(Calendar.YEAR); 
int m2 = calendar.get(Calendar.MONTH); 
return y1 <= y2 && m1 <= m2; 

HQL

select item from Item item 
where year(item.d1) <= year(:d2) 
and month(item.d1) <= month(:d2) 

的算法是在上面的代码中的两件一样的,但它是错误的:

  • 2011-10 LTE 2012-09应返回true但将返回false,因为2011 < 2012但是10 !< 09

如果我使用一个OR代替AND,它仍然是错误的:

  • 2013-01 LTE 2012-05应该返回false但将返回true因为2013 !< 201201 < 05

那么,如何我应该处理?请,我需要它的JAVA和HQL。

回答

6

这应该工作。

select item from Item item 
where year(item.d1) < year(:d2) or 
    (year(item.d1) = year(:d2) 
     and month(item.d1) <= month(:d2)) 

相同的Java:

y1 < y2 || (y1 == y2 && m1 <= m2) 

你可以保持第二支票y1 <= y2但它是有点多余。

+1

男人,当然,你是对的!谢谢';)' – sp00m