Using Groovy comparison operators with Date objects

28.4k views Asked by At

I'm investigating an issue and ran across some suspicious code involving comparison of Date instances using comparison operators. e.g.

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

This resource indicates the above is equivalent to the following

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

However, the GDK documentation on Dates only has examples comparing dates using compareTo, before, and after and I seem to recall specifically avoiding using the comparison operators on Dates due to an experience with unexpected results. Are the above two code examples indeed equivalent (that is, can I safely use comparison operators on Dates in Groovy, or should I only use compareTo, before, and after)?

Thanks!

1

There are 1 answers

2
stan229 On

Well if you plug them into the handy GroovyConsole they have the same result.

If I understand the question correctly:

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

Prints "before" twice

If I switched the stamp date to 2011 lets say it would not print.