2011-02-07 3 views
11

Я изучаю проблему и сталкивался с каким-то подозрительным кодом, связанным с сопоставлением экземпляров Date с использованием операторов сравнения. напримерИспользование операторов сравнения Groovy с объектами Date

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 есть только примеры сравнения дат с использованием compareTo, before и after и я, кажется, вспомнить конкретно избежать, используя сравнение операторы на Датах из-за опыта с неожиданными результатами. Являются ли приведенные выше два примера кода действительно эквивалентными (то есть, можно ли безопасно использовать операторы сравнения в Датах в Groovy, или я должен использовать только compareTo, before и after)?

Спасибо!

ответ

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. –

+0

Как знать два значения даты одинаковы? это так же, как это d.compareTo (новая дата()) == 0)? Thankx – danielad