【问题标题】:How to subtract dates from each other如何相互减去日期
【发布时间】:2011-11-10 19:54:57
【问题描述】:

我正在使用 Groovy。我解析了一个文本文件,其行包含信息,包括日期。我现在只有日期,例如:

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

我想比较这些值之间的差异;我怎样才能做到这一点?即,我想从第二个中减去第一个,并将该值与第三个和第二个之间的差值进行比较。我将保存最大值。

【问题讨论】:

    标签: date text groovy format relative-time-span


    【解决方案1】:

    您可以使用TimeCategory 为日期类添加时差方法:

    import groovy.time.TimeCategory
    
    use(TimeCategory) {
        println date1 - date2
    }
    

    从另一个日期中减去一个日期将产生一个TimeDuration 对象。

    【讨论】:

      【解决方案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
      

      【讨论】:

      • 有没有办法打印 5 个最大的增量?
      • @blaughli 试试deltas.sort { -it.toMilliseconds() }.take( 5 )(groovy 1.8.3+)或deltas.sort { -it.toMilliseconds() }[0..4](Groovy 1.8.2 或更低版本)
      • 有没有办法让我知道集合中这 5 个最大值的索引?
      • @blaughli 这似乎是一个永无止境的问题 ;-) 怎么样:println( [deltas,0..&lt;deltas.size()].transpose().sort { -it[0].toMilliseconds() }.take( 5 ) )
      猜你喜欢
      • 2019-06-28
      • 1970-01-01
      • 2017-05-14
      • 1970-01-01
      • 1970-01-01
      • 2017-04-22
      • 2017-11-19
      • 2012-07-14
      • 2022-01-21
      相关资源
      最近更新 更多