Pregunta

Estoy buscando para añadir al menos 1 segundo para una fecha y hora para que pueda probar la paginación basada fecha. Estoy esperando obtener una fecha de nuestra respuesta de la API, convertir la cadena de fecha en una fecha, a continuación, convertir eso en milisegundos, añadir un segundo y luego convertir de nuevo en un DateString y usarlo en mi próxima solicitud de API. (Sonido prolijo? Seguro que se siente como que es!)

Estoy teniendo problema y cuando trato de analizar una fecha y hora. El siguiente código está lanzando un error:

def c= new date().parse("yyyy-mm-ddThh:mm:ss",lastDate)
log.info "new formatt"+lastDate
log.info c.timeInMillis

Error: groovy.lang.MissingMethodException: No firma del método: java.util.Date.parse () es aplicable para tipos de argumentos: (java.lang.String, groovy.util.slurpersupport.NodeChildren) valores: [aaaa-mm-ddThh: mm: ss, 2007-01-26T00: 00: 00] soluciones posibles: análisis sintáctico (java.lang.String), de análisis sintáctico (java.lang.String, java.lang.String), wait (), el clon (), cualquier (), uso (java.util.List, groovy.lang.Closure)

¿Algún consejo sobre cómo lograr mi objetivo? O se trata de un enfoque tarado?

¿Fue útil?

Solución

Probablemente el más conciso, solución maravilloso idiomática y sin dependencias:

Date.parse( "yyyy-MM-dd'T'HH:mm:ss", text ).with { new Date( time + 1000) }

Otros consejos

Sonidos como bastante una manera indirecta de la adición de un segundo. ¿Por qué no simplemente:

import groovy.time.TimeCategory

def lastDate = new Date()

use(TimeCategory) {
    lastDate = lastDate + 1.second
}

Para más flexible análisis de cadenas fecha, es posible que desee ver en la biblioteca de Java JChronic. Se puede manejar fechas en muchos formatos diferentes y no depender de tener una plantilla exacta como la clase SimpleDateFormat. Aquí hay un ejemplo usando los dos siguientes:

Date.metaClass.'static'.fromString = { str ->
    com.mdimension.jchronic.Chronic.parse(str).beginCalendar.time
}

def lastDate = Date.fromString("2007-01-26T00:00:00")

use (TimeCategory) {
    100.times {
        runTest(lastDate)
        lastDate = lastDate + 1.second
    }
}

Una solución más genérica de Java es el uso de la biblioteca del Joda Time .

//
// Dependencies
// ============
import org.joda.time.*
import org.joda.time.format.*

@Grapes([
    @Grab(group='joda-time', module='joda-time', version='1.6.2')
])

//
// Main program
// ============    
DateTimeFormatter psr = ISODateTimeFormat.dateTimeParser()
DateTimeFormatter fmt = ISODateTimeFormat.dateHourMinuteSecond()

DateTime inDate = psr.parseDateTime("2010-11-18T23:23:59")

println fmt.print(inDate.plusSeconds(1))

Puede manejar cualquier formato de fechas de entrada y salida, incluyendo escenarios complejos con zonas horarias en la cadena de fecha, por ejemplo, "2010-11-18T23: 23: 59 + 01: 00"

Un colega ayudado con lo siguiente: -

--import groovy.time.TimeCategory)

def aDate = lastDate.toString()
def newdate = Date.parse("yyyy-MM-dd'T'HH:mm:ss",aDate)
use(TimeCategory){
 newdate = newdate+1.second
}

Yo tenía un poco de dificultad añadiendo inicialmente el tiempo - los tipos no estaban jugando muy bien juntos.

Gracias a todos por sus respuestas gente!

Tome un vistazo aquí:

¿Quieres usar algo como:

def c = Calendar.instance
c.add(Calendar.SECOND, 1)

Es necesario inicializar los c con una fecha que deseas, vistazo al enlace en diferentes posibilidades, pero aquí hay un ejemplo:

c = new GregorianCalendar(2009, Calendar.JULY, 22, 2, 35, 21)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top