9

我希望将 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] 可能的解决方案:parse(java.lang.String), parse(java.lang.String, java.lang.String), wait(), clone() ,任何(),使用(java.util.List,groovy.lang.Closure)

关于如何实现我的目标的任何提示?或者这是一种愚蠢的方法?

4

5 回答 5

15

听起来像是增加一秒的方式。为什么不只是:

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
    }
}
于 2010-11-17T04:30:10.817 回答
12

可能是没有依赖关系的最简洁、惯用的 groovy 解决方案:

Date.parse( "yyyy-MM-dd'T'HH:mm:ss", text ).with { new Date( time + 1000) }
于 2010-12-02T01:19:45.283 回答
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”

于 2010-11-18T23:35:46.073 回答
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
}

最初添加时间时我遇到了一些困难——这些类型并没有很好地结合在一起。

谢谢大家的回复!

于 2010-11-19T02:54:19.940 回答
0

看看这里:

你想使用类似的东西:

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

您需要c使用所需的日期进行初始化,查看不同可能性的链接,但这里有一个示例:

c = new GregorianCalendar(2009, Calendar.JULY, 22, 2, 35, 21)
于 2010-11-17T03:03:05.083 回答