Groovy время продолжительности - PullRequest
30 голосов
/ 12 октября 2010

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

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

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

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

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

Ответы [ 2 ]

53 голосов
/ 13 октября 2010

Если вы просто хотите найти разницу между двумя моментами, когда вы создаете себя (например, чтобы узнать, сколько времени занимает выполнение чего-либо), вы можете использовать:

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
17 голосов
/ 24 апреля 2014

Я бы сделал что-то подобное

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