2011-02-07 32 views
11

我在調查一個問題,並運行了一些涉及使用比較運算符比較Date實例的可疑代碼。例如對日期對象使用Groovy比較運算符

def stamp = ... //Date 
    def offset = ... //Integer 
    def d = new Date(stamp.time + offset) 
    if (d < new Date()) { 
     ... 
    } 

This資源表示上述等效於以下

def stamp = ... //Date 
    def offset = ... //Integer 
    def d = new Date(stamp.time + offset) 
    if (d.compareTo(new Date()) < 0) { 
     ... 
    } 

然而,GDK documentation on Dates只具有使用compareTobeforeafter比較日期的例子和我似乎特別記得使用比較避免由於遇到意想不到的結果,日期上的操作員。以上兩個代碼示例是否確實相同(也就是說,我可以安全地在Groovy的日期中使用比較運算符,還是應該只使用compareTo,beforeafter)?

謝謝!

回答

5

那麼,如果你將它們插入到方便的GroovyConsole中,它們會得到相同的結果。

如果我理解正確的問題是:

def stamp = Date.parse("MM/dd/yyyy","02/02/2010") 
def offset = 1213123123 
def d = new Date(stamp.time+offset) 
if(d < new Date()) { 
    println "before" 
} 
if(d.compareTo(new Date()) < 0) { 
    println "before" 
} 

打印「之前」兩次

如果我切換打印日期到2011年可以說這不會打印。

+0

我在GroovyConsole中對此進行了實驗,但是恐怕我可能會錯過某個涉及Date的不同組件的角落案例。 – 2011-02-07 21:29:57