2012-05-23 156 views

回答

2

你可以這樣做:

int compareIgnoringDays(Date a, Date b) { 
    new Date(a.time).with { newa -> 
    new Date(b.time).with { newb -> 
     newa.set(date:1) 
     newb.set(date:1) 
     newa.compareTo(newb) 
    } 
    } 
} 

你可以測試,如:

Date a = Date.parse('yyyy/MM/dd', '2012/05/23') 
Date b = Date.parse('yyyy/MM/dd', '2012/05/24') 
Date c = Date.parse('yyyy/MM/dd', '2012/06/01') 

assert compareIgnoringDays(a, b) == 0 
assert compareIgnoringDays(b, a) == 0 
assert compareIgnoringDays(a, c) == -1 
assert compareIgnoringDays(c, a) == 1 

寫入以不同的方式相同的功能是:

int compareIgnoringDays(Date a, Date b) { 
    [ a, b ].collect { new Date(it.time) } // Clone original dates 
      .collect { it.set(date:1) ; it } // Set clones to 1st of the month 
      .with { newa, newb -> 
      newa.compareTo(newb)   // Compare them (this gets returned) 
      } 
} 
+0

謝謝!由於我沒有用Groovy思考過很多東西,所以我將不得不探討這一點,但我猜測這是正確的方法。 – drago

+1

它基本上將這兩個日期的副本設置爲本月的第一個日期,然後比較這些日期...謹慎設置時間,因爲顯然這會影響事物... Groovy有一個['Date.clearTime ()'方法](http://groovy.codehaus.org/groovy-jdk/java/util/Date.html#clearTime%28%29),你可能需要使用,如果時間將會在你的日期,但不是你的比較 –

1

您可以比較兩個日期是這樣的:

def myFormat = 'MM/dd/yyyy' 
if(Date.parse(myFormat, '02/03/2012') >= Date.parse(myFormat, '03/02/2012)) 
{...}