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!

Stephen Swensen
  • 22,107
  • 9
  • 81
  • 136

1 Answers1

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.

stan229
  • 2,592
  • 19
  • 23
  • 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. – Stephen Swensen Feb 07 '11 at 21:29
  • how to know two date value is the same ? is it just like this d.compareTo(new Date()) ==0 ) ? thankx – Develop4Life Jul 09 '13 at 07:38