Использование операторов сравнения Groovy с объектами Date - PullRequest
11 голосов
/ 08 февраля 2011

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

Спасибо!

1 Ответ

5 голосов
/ 08 февраля 2011

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

...