【问题标题】:Groovy time durationsGroovy 持续时间
【发布时间】:2011-04-24 00:24:28
【问题描述】:

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

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

理想情况下,我希望以小时、分钟、秒、毫秒为单位返回持续时间。

有人可以帮忙吗?我尝试使用 Groovy 的持续时间类,但没有取得任何进展。

感谢您的帮助。

【问题讨论】:

  • 是你得到的格式还是你转换成这个格式?

标签: time groovy duration


【解决方案1】:

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

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

【讨论】:

  • 请注意 TimeCategory 不是线程安全的。很难找到这个
【解决方案2】:

我会做这样的事情

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

【讨论】:

    【解决方案3】:

    我有同样的问题,我使用了Demian 在他的answer 中建议的内容,除了我需要它是通用的并且可以使用startstop 的任何值,因此我正在分享对 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
    

    【讨论】:

      猜你喜欢
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      • 2020-09-24
      • 2018-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多