2011-02-07 15 views
11

Prowadzę dochodzenie w sprawie problemu i przeszukuję podejrzany kod obejmujący porównywanie wystąpień Date za pomocą operatorów porównania. na przykładUżywanie operatorów porównania Groovy z obiektami Date

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

This zasób wskazuje powyższe jest równoważne następującym

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

Jednak GDK documentation on Dates ma tylko przykłady porównywanie dat przy użyciu compareTo, before i after i wydaje mi się przypomnieć specjalnie unikając przy użyciu porównania operatorzy w dniu dat z powodu nieoczekiwanych rezultatów. Czy powyższe dwa przykłady kodu są rzeczywiście równoważne (to znaczy czy mogę bezpiecznie używać operatorów porównania w Datach w Groovy, czy też powinienem używać tylko compareTo, before i after)?

Dzięki!

Odpowiedz

5

Po podłączeniu do poręcznej konsoli GroovyConsole wyniki są takie same.

Jeśli rozumiem pytanie poprawnie:

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

Drukuje „przed” dwukrotnie

Gdybym włączony datownik do 2011 powiedzmy, że nie będzie drukować.

+0

Zrobiłem eksperymenty z tym w GroovyConsole, ale obawiam się, że może mi brakować jakiegoś narożnego przypadku obejmującego różne elementy Daty. –

+0

jak poznać dwie wartości daty jest taka sama? czy to tak jak w przypadku d.compareTo (new Date()) == 0)? dziękuję – danielad

Powiązane problemy