Как вычесть даты друг из друга

Я использую Groovy. Я проанализировал текстовый файл, строки которого содержат информацию, включая даты. Теперь у меня есть только даты, например:

08:13:16,121
09:32:42,102
10:43:47,153

Я хочу сравнить дельты между этими значениями; как я могу это сделать? т.е. я хочу вычесть первое из второго и сравнить это значение с разницей между третьим и вторым. Я сохраню наибольшее значение.

2 ответа

Решение

Предполагая, что ваше время в файле times.txt, вы можете сделать это:

def parseDate = { str -> new Date().parse( 'H:m:s,S', str ) }

def prevDate = null
def deltas = []

use( groovy.time.TimeCategory ) {
  new File( 'times.txt' ).eachLine { line ->
    if( line ) {
      if( !prevDate ) {
        prevDate = parseDate( line )
      }
      else {
        def nextDate = parseDate( line )
        deltas << nextDate - prevDate
        prevDate = nextDate
      }
    }
  }
}
println deltas
println( deltas.max { it.toMilliseconds() } )

Который напечатает:

[1 hours, 19 minutes, 25.981 seconds, 1 hours, 11 minutes, 5.051 seconds]
1 hours, 19 minutes, 25.981 seconds

Вы можете использовать TimeCategory, чтобы добавить методы для разницы во времени к классам дат:

import groovy.time.TimeCategory

use(TimeCategory) {
    println date1 - date2
}

Вычитание одной даты из другой приведет к объекту TimeDuration.

Другие вопросы по тегам