以两个日期的小时或分钟计算总持续时间



我是groovy的新手,目前正在处理日期操作。我可以在groovy中减去或增加两个日期吗?例如:

def build = Build.get(params.id)
def firstDate = build.firstDate
def secondDate = build.secondDate

现在我想添加日期如下:

firstDate + secondDate = (total hours or minutes) 

…还是需要转换成整数?

更新:

例如,起始日期为2013年1月7日12:00,结束日期为2013年1月8日1:30。我想计算一下这两个日期之间有多少小时或分钟……对不起,我的英语不好:(

例如,起始日期为january .7,2013 12:00,结束日期为Jan.8 2013 1:30。我想计算它们是多少小时或分钟在这两个日期之间。

下面将给出以毫秒为单位的差异。

def diffdate = secondDate.getTime() - firstDate.getTime();

现在使用适当的数学转换成小时和分钟。

。Diffdate/60000显示分钟,Diffdate/3600000显示小时

Using timeategory:

use (groovy.time.TimeCategory) {
   def duration = secondDate - firstDate
   println "Days: ${duration.days}, Hours: ${duration.hours}, Hours: ${duration.minutes}"
}

TimeCategory类别提供了您正在寻找的内容:)

当使用这个类别时,java.util.Dates变得更加用户友好,并且允许您用很少的代码完成您期望它们做的事情。例如,减去两个日期并得到TimeDuration作为结果:

import groovy.time.TimeCategory
// Using same dates as the question's example.
def start = Date.parseToStringDate('Mon Jan 07 12:00:00 GMT 2013')
def end = Date.parseToStringDate('Tue Jan 07 01:30:00 GMT 2013')
use (TimeCategory) {
    println start - end // Prints "10 hours, 30 minutes"
}

我在这里做一个假设:Groovy可以使用Java库。

在这种情况下,您应该查看JodaTime库。它有一个类叫Duration。期间可以上两节DateTime课。它们与java Date非常相似。下面是如何以一种漂亮的方式打印出持续时间。为了方便起见,我将把答案内联到链接中:

Duration duration = new Duration(123456); // in milliseconds
PeriodFormatter formatter = new PeriodFormatterBuilder()
     .appendDays()
     .appendSuffix("d")
     .appendHours()
     .appendSuffix("h")
     .appendMinutes()
     .appendSuffix("m")
     .appendSeconds()
     .appendSuffix("s")
     .toFormatter();
String formatted = formatter.print(duration.toPeriod());
System.out.println(formatted);

最新更新