2010-11-17 30 views
8

Tarihe dayalı sayfalandırmayı test edebilmem için datetime 1 saniye eklemek istiyorum. API yanıtımızdan bir tarih almayı, tarih dizesini bir tarihe dönüştürmeyi, ardından bunu milisaniyeye dönüştürmeyi, bir saniye ekledikten sonra tekrar bir test haline dönüştürmeyi ve bir sonraki API isteğimde kullanmamı umuyorum. (sound longwinded? Olduğunu hissediyor!)Groovy'de tarih aralığı

Bir dateTime ayrıştırmaya çalıştığımda sorun yaşıyorum.

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

Hata: groovy.lang.MissingMethodException: Yöntemin bir imza: java.util.Date.parse() değişken türleri için geçerli olan: (java.lang.String aşağıdaki kod bir hata atıyor , groovy.util.slurpersupport.NodeChildren) değerleri: [yyyy-mm-ddThh: dd: ss, 2007-01-26T00: 00: 00] Olası çözümler: ayrıştırma (java.lang.String), ayrıştırma (java.lang. String, java.lang.String), wait(), clone(), any(), kullanın (java.util.List, groovy.lang.Closure)

Hedefime nasıl ulaşacağınıza dair ipuçları var mı? Yoksa kararsız bir yaklaşım mı?

cevap

9

Muhtemelen en consise, bağımlılıklar olmadan deyimsel harika bir çözüm:

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

Dur, güzel ve özlü. Bir atış yapacağım ve uygun olup olmadığına bakacağım. Teşekkürler! –

0

burada bir göz atın: bakmak, İstediğin bir tarihle c ilklendirmelisiniz

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

:

Sen gibi bir şey kullanmak istiyorum Farklı olasılıklara bağlantı, ama bir örnek:

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

Sanki bir saniye ekleme yolu gibi oldukça yuvarlak. Neden sadece:

import groovy.time.TimeCategory 

def lastDate = new Date() 

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

daha esnek tarih dizesi ayrıştırma için, JChronic java kütüphanede bakmak isteyebilirsiniz. Tarihleri ​​birçok farklı biçimde işleyebilir ve SimpleDateFormat sınıfı gibi tam bir şablona sahip olmaya dayanmaz. İşte bunlardan ikisini de kullanarak bir örnek:

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

Daha genel bir Java çözüm Joda Time kütüphanesi kullanmaktır.

// 
// 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)) 
Bu tarihi dize saat dilimleri, örneğin karmaşık senaryoları içeren herhangi bir gelen ve giden tarih biçimlendirme, işleyebilir

Bir meslektaşım yardım "2010-11-18T23: 00: 23: 59 + 01"

1

takipçinizin - türlerini bir arada güzel oynamıyordun -

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

ben zorluk başlangıçta zaman eklemeden biraz vardı.

Yanıtlarınız için teşekkürler millet!

İlgili konular