2010-11-17 15 views
8

Czekam na dodanie 1 sekundy do datetime, dzięki czemu mogę przetestować paginacja na podstawie daty. Mam nadzieję, że otrzymam datę z naszej odpowiedzi API, skonwertujemy ciąg daty na datę, a następnie przekonwertujemy ją na milisekundy, dodamy sekundę, a następnie dokonamy konwersji z powrotem w datestring i użyjemy go w kolejnym żądaniu API. (brzmi to tak, jakby brzmiało!)Data w Groovy

Mam i wypuszczam, gdy próbuję przeanalizować dateTime. Poniższy kod jest rzucanie błąd:

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

Błąd: groovy.lang.MissingMethodException: No podpis metody: java.util.Date.parse() ma zastosowanie do typów argumentów: (java.lang.String , groovy.util.slurpersupport.NodeChildren) wartości: [rrrr-mm-ddThg: mm: ss, 2007-01-26T00: 00: 00] Możliwe rozwiązania: parsowanie (java.lang.String), parsowanie (java.lang. String, java.lang.String), wait(), clone(), any(), use (java.util.List, groovy.lang.Closure)

Jakieś wskazówki, jak osiągnąć mój cel? A może to podejście przygnębiające?

Odpowiedz

9

Prawdopodobnie najbardziej consise, idiomatyczne porywające rozwiązanie bez zależności:

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

Whoa, ładny i zwięzły. Dam mu szansę i zobaczę, czy pasuje. Dzięki! –

0

Spójrz tutaj:

chcesz użyć czegoś takiego:

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

musisz zainicjować c z datą chcesz, spójrz na link do różnych możliwości, ale oto przykład:

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

Brzmi całkiem nieźle, jeśli chodzi o sposób dodawania sekundy. Dlaczego nie tylko:

import groovy.time.TimeCategory 

def lastDate = new Date() 

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

Aby uzyskać bardziej elastyczne analizowanie ciągów znaków daty, warto zajrzeć do biblioteki JChronic Java. Może obsługiwać daty w wielu różnych formatach i nie polega na posiadaniu dokładnego szablonu, takiego jak klasa SimpleDateFormat. Oto przykład stosując oba te:

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

Bardziej ogólne rozwiązanie Java jest do korzystania z biblioteki 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)) 

może obsługiwać dowolną formatowanie daty przychodzącej i wychodzącej, w tym złożonych scenariuszy ze stref czasowych w Data łańcucha, na przykład „2010-11-18T23: 23: 59 + 01: 00”

1

Kolega pomógł z następującymi -

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

Początkowo miałem trudności z dodaniem czasu - typy nie grały ładnie razem.

Dziękuję wszystkim za odpowiedzi!