def timez = ['2017-12-11T13:11:51.728Z', '2017-12-11T13:21:51.728Z', '2017-12-11T13:30:00.000Z']
def dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
def roundValue = 15
//Change timezone if needed
def tz = 'IST'
TimeZone.setDefault(TimeZone.getTimeZone(tz))
Calendar calendar = Calendar.getInstance()
def getNearestMinutes
//Closure which gets called recursive
getNearestMinutes = { cmin, nearMin = roundValue ->
def tempResult = cmin % nearMin
if ( tempResult < nearMin && (0 < (nearMin - cmin)) ) {
return (nearMin - cmin)
} else {
return getNearestMinutes(cmin, nearMin+roundValue)
}
}
//Loop thru times and round the time
timez.each {
calendar.
time = Date.
parse(dateFormat
,it
) def currentMinute = calendar.get(Calendar.MINUTE)
def cof = currentMinute % roundValue
if (cof) {
currentMinute += getNearestMinutes(currentMinute)
}
calendar.set(Calendar.MINUTE, currentMinute )
calendar.set(Calendar.SECOND, 0)
calendar.set(Calendar.MILLISECOND, 0)
println calendar.
time.
format(dateFormat
) }
ZGVmIHRpbWV6ID0gWycyMDE3LTEyLTExVDEzOjExOjUxLjcyOFonLCAnMjAxNy0xMi0xMVQxMzoyMTo1MS43MjhaJywgJzIwMTctMTItMTFUMTM6MzA6MDAuMDAwWiddCmRlZiBkYXRlRm9ybWF0ID0gInl5eXktTU0tZGQnVCdISDptbTpzcy5TU1MnWiciCmRlZiByb3VuZFZhbHVlID0gMTUKLy9DaGFuZ2UgdGltZXpvbmUgaWYgbmVlZGVkCmRlZiB0eiA9ICdJU1QnCgpUaW1lWm9uZS5zZXREZWZhdWx0KFRpbWVab25lLmdldFRpbWVab25lKHR6KSkKCkNhbGVuZGFyIGNhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKQoKZGVmIGdldE5lYXJlc3RNaW51dGVzCi8vQ2xvc3VyZSB3aGljaCBnZXRzIGNhbGxlZCByZWN1cnNpdmUKZ2V0TmVhcmVzdE1pbnV0ZXMgPSB7IGNtaW4sIG5lYXJNaW4gPSByb3VuZFZhbHVlIC0+CglkZWYgdGVtcFJlc3VsdCA9IGNtaW4gJSBuZWFyTWluCglpZiAoIHRlbXBSZXN1bHQgPCBuZWFyTWluICYmICgwIDwgKG5lYXJNaW4gLSBjbWluKSkgKSB7CgkJcmV0dXJuIChuZWFyTWluIC0gY21pbikKCX0gZWxzZSB7IAoJCXJldHVybiBnZXROZWFyZXN0TWludXRlcyhjbWluLCBuZWFyTWluK3JvdW5kVmFsdWUpIAoJfQp9CiAgCgovL0xvb3AgdGhydSB0aW1lcyBhbmQgcm91bmQgdGhlIHRpbWUKdGltZXouZWFjaCB7CgljYWxlbmRhci50aW1lID0gRGF0ZS5wYXJzZShkYXRlRm9ybWF0LGl0KQoJZGVmIGN1cnJlbnRNaW51dGUgPSBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuTUlOVVRFKQoJZGVmIGNvZiA9IGN1cnJlbnRNaW51dGUgJSByb3VuZFZhbHVlCglpZiAoY29mKSB7CgkJY3VycmVudE1pbnV0ZSArPSBnZXROZWFyZXN0TWludXRlcyhjdXJyZW50TWludXRlKQoJfQoJY2FsZW5kYXIuc2V0KENhbGVuZGFyLk1JTlVURSwgY3VycmVudE1pbnV0ZSApCgljYWxlbmRhci5zZXQoQ2FsZW5kYXIuU0VDT05ELCAwKQoJY2FsZW5kYXIuc2V0KENhbGVuZGFyLk1JTExJU0VDT05ELCAwKQoJcHJpbnRsbiBjYWxlbmRhci50aW1lLmZvcm1hdChkYXRlRm9ybWF0KSAgICAKfQ==