2012-09-18 241 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