No hay firma de método: java.util.Date.minus() es aplicable para los tipos de argumento: (Integer)?
Estoy en el proceso de actualizar grails 2.2 a grails 4.0.10.
En grails 2.2, que utilizaba Java 7, esto solía funcionar:
def eanalytics = EventAnalytics.createCriteria().get(){
eq('event', raceGroup)
lt('dateCreated', timeService.now())
gt('dateCreated', timeService.now() - 1)
}
Ahora, en grails 4 y Java 8, estoy obteniendo esta excepción:
Caused by: groovy.lang.MissingMethodException: No hay una firma de método aplicable para java.util.Date.minus() con argumentos de tipo: (Integer) valores: [1]
Posibles soluciones: encontrar(), encontrar(groovy.lang.Closure), es(java.lang.Object), cualquier(), imprimir(java.io.PrintWriter), usar([Ljava.lang.Objec
Parece que no puedo obtener una nueva fecha simplemente restando el número de días a la fecha en Java 8. ¿Cuál es el código equivalente para hacer esto? Gracias por la ayuda.
timeservice.now
es:
def now(){
def now = new Date()
return now
}
davy.ai
En Java 8, la clase
java.util.Date
no tiene un métodominus()
que acepte un entero. En su lugar, puedes usar la clasejava.time.LocalDate
, que fue introducida para reemplazar la antigua claseDate
.Para crear un nuevo objeto
LocalDate
que sea un número especificado de días antes de la fecha actual, puedes usar el métodominusDays()
. Aquí tienes un ejemplo:En tu código, puedes reemplazar la línea
gt('dateCreated', timeService.now() - 1)
con:Esto creará un nuevo objeto
LocalDate
que representa ayer, y luego lo convertirá de nuevo a un objetojava.util.Date
(que es necesario para la compatibilidad con tu código existente).