1

我是 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。我想计算他们在这些日期之间有多少小时或分钟......对不起我的英语不好:(

4

4 回答 4

3

例如,开始日期为 2013 年 1 月 7 日 12:00,结束日期为 2013 年 1 月 8 日 1:30。我想计算这些日期之间的小时数或分钟数。

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

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

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

例如 diffdate / 60000 会给你分钟,diffdate / 3600000 会给你几个小时

于 2013-01-14T02:55:10.130 回答
2

使用TimeCategory

use (groovy.time.TimeCategory) {
   def duration = secondDate - firstDate
   println "Days: ${duration.days}, Hours: ${duration.hours}, Hours: ${duration.minutes}"
}
于 2013-01-14T03:01:13.873 回答
1

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

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

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"
}
于 2013-01-14T03:13:09.300 回答
0

我将在这里做一个假设: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);
于 2013-01-14T02:37:09.260 回答