Подтвердить что ты не робот

Groovy продолжительность времени

Привет. Я пытаюсь вычислить разницу (продолжительность) между двумя раз в Groovy. например.

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

В идеале мне хотелось бы получить продолжительность, возвращаемую в часы, минуты, секунды, миллисекунды.

Кто-нибудь может помочь. Я пытался использовать классы продолжительности Groovy, но не смог добиться какого-либо прогресса.

Спасибо за помощь.

4b9b3361

Ответ 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

Ответ 2

Я бы сделал что-то вроде этого

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

an тогда

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