【问题标题】:Count total Duration in terms of hours or minutes of two Dates以两个日期的小时或分钟计算总持续时间
【发布时间】:2013-01-14 02:20:29
【问题描述】:

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

【问题讨论】:

  • 两个日期相加是什么意思?
  • 我的意思是例如我想添加总小时数或分钟数?
  • 是的,添加日期没有意义.. 为日期添加持续时间.. 减去日期有意义。
  • “我想添加总小时数或分钟数”“总小时数”是什么意思?从什么时候开始我们需要计算它们?
  • 例如,开始日期为2013年1月7日12:00,结束日期为2013年1月8日1:30。我想计算他们在这些日期之间有多少小时或分钟......对不起我的英语不好:(

标签: java groovy


【解决方案1】:

例如,开始日期为 Jan.7,2013 12:00,结束日期为 2013 年 1 月 8 日 1:30。我想计算他们是多少小时或分钟 在这些日期之间。

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

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

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

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

【讨论】:

    【解决方案2】:

    使用TimeCategory

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

    【讨论】:

      【解决方案3】:

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

      使用此类别时,java.util.Dates 变得更加用户友好,让您可以用很少的代码完成您希望它们完成的事情。例如,subtracting two 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"
      }
      

      【讨论】:

        【解决方案4】:

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

        既然如此,您应该查看 JodaTime 库。它有一个名为Duration 的类。持续时间可以占用两个DateTime 课程。它们与 java Date 非常相似。 Here's how you can print out a duration in a pretty way.为方便起见,我将答案内联在链接中:

        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);
        

        【讨论】:

        • 这不是答案,而是评论
        • 哦,很多。我认为它可以通过几行或一行来完成。不过谢谢,
        • 也许 groovy 有一种方法可以从 Java 中以更简单的方式完成。我对groovy一无所知,抱歉。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-16
        • 1970-01-01
        • 2016-06-03
        • 2011-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多