Using Groovy comparison operators with Date objects
Asked Answered
P

1

11

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!

Pugging answered 7/2, 2011 at 21:8 Comment(0)
W
5

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.

Winch answered 7/2, 2011 at 21:27 Comment(2)
I did experiment with this in the GroovyConsole, but am afraid I might be missing some corner case involving the different components of a Date.Pugging
how to know two date value is the same ? is it just like this d.compareTo(new Date()) ==0 ) ? thankxPreceptive

© 2022 - 2024 — McMap. All rights reserved.