题
我希望在日期时间中添加 1 秒,以便我可以测试基于日期的分页。我希望从我们的 API 响应中获取日期,将日期字符串转换为日期,然后将其转换为毫秒,添加一秒,然后转换回日期字符串并在下一个 API 请求中使用它。(听起来很啰嗦?确实感觉就是这样!)
当我尝试解析日期时间时遇到问题。以下代码抛出错误:
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)值:[yyyy-mm-ddThh:mm:ss, 2007-01-26T00:00:00] 可能的解决方案:解析(java.lang.String),解析(java.lang.String,java.lang.String),等待(),克隆(),任何(),使用(java.util.List,groovy.lang.Closure)
关于如何实现我的目标有什么建议吗?或者这是一种愚蠢的做法?
解决方案
可能最consise,而不依赖常规惯用溶液:
Date.parse( "yyyy-MM-dd'T'HH:mm:ss", text ).with { new Date( time + 1000) }
其他提示
听起来像相当周围添加第二方式。为什么不干脆:
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
}
}
一个更通用的Java解决方案是使用约达时间库。
//
// 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”
用下面的帮助一个同事 -
--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
}
我有一点困难最初加入的时间 - 的类型未被很好地一起玩。
感谢所有您的答复乡亲!
看看这里:
你想使用类似的东西:
def c = Calendar.instance
c.add(Calendar.SECOND, 1)
你需要初始化 c
有了您想要的日期,请查看有关不同可能性的链接,但这里有一个示例:
c = new GregorianCalendar(2009, Calendar.JULY, 22, 2, 35, 21)