2011-02-07 13 views
11

Sto analizzando un problema e ho trovato alcuni codici sospetti che coinvolgono il confronto delle istanze di Date utilizzando operatori di confronto. per esempio.Utilizzo degli operatori di confronto di Groovy con gli oggetti Date

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

This risorsa indica quanto sopra è equivalente al seguente

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

Tuttavia, l'GDK documentation on Dates ha solo degli esempi di confronto date utilizzando compareTo, before e after e mi sembra di ricordare in particolare evitando di usare il confronto operatori su Date a causa di un'esperienza con risultati inaspettati. I due esempi di codice sopra riportati sono effettivamente equivalenti (ovvero, posso utilizzare in modo sicuro operatori di confronto su Date in Groovy, oppure dovrei utilizzare solo compareTo, before e after)?

Grazie!

risposta

5

Bene, se li colleghi alla comoda GroovyConsole hanno lo stesso risultato.

Se ho capito correttamente alla domanda:

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" 
} 

stampe "prima" due volte

Se ho cambiato la data di timbro al 2011 consente di dire che non sarebbe stampare.

+0

Ho fatto esperimenti con questo nella GroovyConsole, ma temo che possa mancare qualche caso angolare che coinvolge i diversi componenti di un appuntamento. –

+0

come sapere che il valore di due date è lo stesso? è proprio come questo d.compareTo (new Date()) == 0)? thankx – danielad