Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Groovy time durations

Hi I'm trying to calculate the difference (duration) between two times in Groovy. e.g.

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

Ideally I would like the get the duration returned in Hours, Minutes, Seconds, Milliseconds.

Can anybody please help. I've tried to use Groovy's duration classes but have not been able to make any progress.

Thanks for your assistance.

like image 833
Carl Bourne Avatar asked Oct 11 '10 20:10

Carl Bourne


People also ask

How do I use TimeCategory in groovy?

Using TimeCategory make DateTime manipulation simpler than using regular Java time/date API. Like the previous tutorial, we will use web Groovy executor to run our Groovy codes. Open your browser and go to Groovy Console. Next, just paste your code inside code box then click execute.


2 Answers

If you just want to find the difference between two times you create yourself (for instance to see how long something takes to execute) you could use:

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 

If you specifically need to work with the dates as supplied as string above. Try this, first the format of them is a bit odd, in particular the +01:00, which is the timezone, I would expect it to be +0100 for format to work. You could just remove the timezone I just did a replace.

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 

Outputs

Thu Oct 07 15:15:33 MDT 2010 Thu Oct 07 15:19:52 MDT 2010 4 minutes, 19.246 seconds 
like image 117
Demian Avatar answered Sep 21 '22 01:09

Demian


I would do something like that

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

an then

TimeDuration timeDuration = elapsedTime { /*code you want to time*/ } 
like image 27
DanieleDM Avatar answered Sep 20 '22 01:09

DanieleDM