2010-11-17 89 views
8

Estoy buscando agregar 1 segundo a una fecha y así puedo probar la paginación basada en la fecha. Espero obtener una fecha de nuestra respuesta API, convertir la cadena de fecha en una fecha, luego convertir eso en milisegundos, agregar un segundo y luego volver a convertirlo en una cadena de fechas y usarlo en mi próxima solicitud de API. (sonido de larga duración? Seguro que se siente como es!)Fecha y hora en Groovy

Estoy teniendo y problema cuando trato de analizar un dateTime. El siguiente código es tirar 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 hay ninguna firma de método: java.util.Date.parse() es aplicable para los tipos de argumentos: (java.lang.String , groovy.util.slurpersupport.NodeChildren) values: [aaaa-mm-ddThh: mm: ss, 2007-01-26T00: 00: 00] Posibles soluciones: parse (java.lang.String), parse (java.lang. String, java.lang.String), wait(), clone(), any(), use (java.util.List, groovy.lang.Closure)

¿Algún consejo sobre cómo lograr mi objetivo? ¿O es un enfoque poco convincente?

Respuesta

9

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) } 
+0

Whoa, agradable y conciso. Voy a darle una oportunidad y ver si encaja. ¡Gracias! –

0

Tome un vistazo aquí:

que desea utilizar algo como:

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

Es necesario inicializar los c con una fecha que deseas, mira la enlace en diferentes posibilidades, pero he aquí un ejemplo:

c = new GregorianCalendar(2009, Calendar.JULY, 22, 2, 35, 21) 
14

Suena como una ronda sobre cómo agregar 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. Puede manejar fechas en muchos formatos diferentes y no depende de tener una plantilla exacta como la clase SimpleDateFormat. Aquí hay un ejemplo usando ambas cosas:

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

Una solución más genérica de Java es el uso de la biblioteca 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"

1

Un colega ayudaron 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 
} 

Tuve un poco de dificultad inicialmente para agregar el tiempo - los tipos no estaban jugando muy bien juntos.

Gracias a todos por sus respuestas amigos!