2011-02-07 17 views
11

Estoy investigando un problema y encontré algún código sospechoso que implica la comparación de instancias de fecha usando operadores de comparación. p.ej.Uso de operadores de comparación de Groovy con objetos de fecha

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

This recurso indica lo anterior es equivalente a la siguiente

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

Sin embargo, el GDK documentation on Dates Sólo hay ejemplos que comparan las fechas usando compareTo, before y after y me parece recordar específicamente evitar el uso de la comparación operadores en Fechas debido a una experiencia con resultados inesperados. ¿Son los dos ejemplos de código anteriores equivalentes (es decir, puedo usar operadores de comparación de forma segura en Groovy, o debería usar solo compareTo, before y after)?

Gracias!

Respuesta

5

Bueno, si los conecta a la práctica GroovyConsole tienen el mismo resultado.

Si entiendo bien la pregunta:

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

imprime "antes de" dos veces

Si cambié la fecha del sello a 2011 digamos que no sería imprimir.

+0

Experimenté con esto en GroovyConsole, pero me temo que me puede estar faltando algún caso de esquina que involucre los diferentes componentes de una Fecha. –

+0

cómo saber el valor de dos fechas es el mismo? ¿Es así d.compareTo (new Date()) == 0)? gracias – danielad

Cuestiones relacionadas