Time 常规持续时间

Time 常规持续时间,time,groovy,duration,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的duration类,但没有取得任何进展 谢谢你的帮助 如果您只想找出您自己创建的两次之间的差异(例如,查看执行某项任务所需的时间),您可以使用: import gro

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

start =  "2010-10-07T22:15:33.110+01:00"
stop =   "2010-10-07T22:19:52.356+01:00"
理想情况下,我希望以小时、分钟、秒、毫秒为单位返回持续时间

谁能帮忙吗。我曾尝试使用Groovy的duration类,但没有取得任何进展


谢谢你的帮助

如果您只想找出您自己创建的两次之间的差异(例如,查看执行某项任务所需的时间),您可以使用:

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

我会做那样的事

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

我有同样的问题,我使用了他的建议,只是我需要它是通用的,并且可以处理
start
stop
的任何值,因此我将分享Demian答案的改进,以供将来参考

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

注意
groovy.time.TimeDuration
不可序列化,因此会弄乱jenkins的CPS groovy并抛出
java.io.NotSerializableException

import groovy.time.*

def start =  "2010-10-07T22:15:33.110+01:00"
def stop =   "2010-10-07T22:19:52.356+01:00"
def format = "yyy-MM-dd'T'HH:mm:ss.SSSZ"
start = Date.parse(format , start.replaceAll(/([+\-])(\d\d):(\d\d)/, /$1$2$3/))
println start
stop = Date.parse(format , stop.replaceAll(/([+\-])(\d\d):(\d\d)/, /$1$2$3/))
println stop
TimeDuration duration = TimeCategory.minus(stop, start)
println duration

是您获得的时间格式还是您转换为此格式?仅注释时间类别不是线程安全的。通过艰苦的方式发现了这一点