Использование операторов сравнения Groovy с объектами Date

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

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

Этот ресурс указывает, что вышеуказанное эквивалентно следующему

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

Однако в документации GDK по датам есть только примеры сравнения дат с использованием compareTo, before и after, и я кажется, вспоминают, что специально избегали использования операторов сравнения в Dates из-за опыта с неожиданными результатами. Действительно ли два приведенных выше примера кода эквивалентны (то есть можно ли безопасно использовать операторы сравнения в Dates в Groovy или следует использовать только compareTo, before и after)?

Спасибо!


person Stephen Swensen    schedule 07.02.2011    source источник


Ответы (1)


Хорошо, если вы подключите их к удобной 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 год, скажем, она бы не печаталась.

person stan229    schedule 07.02.2011
comment
Я экспериментировал с этим в GroovyConsole, но боюсь, что могу упустить какой-то краеугольный случай, связанный с различными компонентами Date. - person Stephen Swensen; 08.02.2011
comment
как узнать, что два значения даты одинаковы? это так же, как это d.compareTo(new Date()) ==0)? спасибо - person Daniel Adenew; 09.07.2013