2010-11-17 104 views
8

我期待在日期時間中添加1秒,以便我可以測試基於日期的分頁。我希望從我們的API響應中獲取日期,將日期字符串轉換爲日期,然後將其轉換爲毫秒,再添加一秒,然後轉換回日期字符串並在我的下一個API請求中使用它。 (soundwinwinded?它肯定感覺就像是這樣!)Groovy中的日期時間

我有問題,當我試圖解析dateTime。下面的代碼引發錯誤:

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

錯誤: groovy.lang.MissingMethodException:方法的無簽名:java.util.Date.parse()是適用於參數類型:(java.lang.String中,groovy.util.slurpersupport.NodeChildren)values:[yyyy-mm-ddThh:mm:ss,2007-01-26T00:00:00]可能的解決方案:parse(java.lang.String),parse(java.lang。 String,java.lang.String),wait(),clone(),any(),use(java.util.List,groovy.lang.Closure)

有關如何實現我的目標的任何提示?或者這是一個模糊的方法?

回答

9

也許最consise,不依賴慣用常規的解決方案:

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

哇,漂亮,簡潔。我會試一試,看看它是否合適。謝謝! – 2010-12-05 22:37:50

0

到這裏看看:

你想使用類似:

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

你需要與你想約會初始化c,看看鏈接在不同的可能性,但這裏是一個例子:

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

聽起來像是增加一秒的方式。爲什麼不乾脆:

import groovy.time.TimeCategory 

def lastDate = new Date() 

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

更靈活的日期字符串分析,你可能想看看JChronic java庫。它可以處理許多不同格式的日期,並且不依賴像SimpleDateFormat類那樣的精確模板。下面是使用這兩個例子:

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

一個更通用的Java解決方案是使用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)) 

它可以處理任何傳入和傳出的日期格式,包括在日期字符串時區,如複雜的場景「2010-11-18T23:23:59 + 01:00」

1

一位同事幫助用下面 -

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

我有一點困難,最初加入的時間 - 類型並沒有很好地玩在一起。

非常感謝您的回覆!