Groovy持续时间

时间:2010-10-11 20:50:17

标签: time groovy duration

您好我正在尝试计算Groovy中两次之间的差异(持续时间)。 e.g。

start =“2010-10-07T22:15:33.110 + 01:00” stop =“2010-10-07T22:19:52.356 + 01:00”

理想情况下,我希望获得以小时,分钟,秒,毫秒返回的持续时间。

任何人都可以帮忙。我曾尝试使用Groovy的持续时间类,但未能取得任何进展。

感谢您的协助。

3 个答案:

答案 0 :(得分:52)

如果您只想找到自己创建的两次之间的差异(例如,查看要执行的内容需要多长时间),您可以使用:

import groovy.time.*

def timeStart = new Date()
// Some code you want to time
def timeStop = new Date()
TimeDuration duration = TimeCategory.minus(timeStop, timeStart)
println duration

如果您特别需要使用上面提供的日期作为字符串。试试这个,首先它们的格式有点奇怪,特别是+01:00,这是时区,我希望它是+0100格式才能工作。您可以删除我刚刚替换的时区。

import groovy.time.*

def start = Date.parse("yyy-MM-dd'T'HH:mm:ss.SSSZ","2010-10-07T22:15:33.110+01:00".replace("+01:00","+0100"))
println start
def end = Date.parse("yyy-MM-dd'T'HH:mm:ss.SSSZ","2010-10-07T22:19:52.356+01:00".replace("+01:00","+0100"))
println end
TimeDuration duration = TimeCategory.minus(end, start)
println duration

输出

Thu Oct 07 15:15:33 MDT 2010
Thu Oct 07 15:19:52 MDT 2010
4 minutes, 19.246 seconds

答案 1 :(得分:16)

我会做那样的事情

def elapsedTime(Closure closure){
    def timeStart = new Date()
    closure()
    def timeStop = new Date()
    TimeCategory.minus(timeStop, timeStart)
}

然后

TimeDuration timeDuration = elapsedTime { /*code you want to time*/ }

答案 2 :(得分:0)

我有相同的问题,我使用了Demian在他的answer中提出的建议,除了我需要它是通用的并且可以使用start或{{1 }},因此,我分享了Demian答案的改进,以供将来参考。

它仅使用OP变量,并使用正则表达式进行通用替换,以保持时区偏移量的值

请注意stop 不可序列化,因此将与詹金斯的CPS规则混淆并抛出groovy.time.TimeDuration

java.io.NotSerializableException