Groovy TimeCategory - 有没有比这更好的方法来操纵时间/持续时间?

时间:2017-02-01 16:13:59

标签: groovy

我熟悉了Groovy的TimeCategory和TimeDuration,无论哪种方式都非常有用,但我想知道是否有更清晰的表达方式我想要。

关闭页面like this中的示例,我在Intellij的groovy控制台中尝试了以下内容:

import groovy.time.TimeCategory
println ""
use(TimeCategory) {
    println "3.days.from.now = [${3.days.from.now}]"
}

如果我现在就打电话,2月1日星期三上午9:30左右,这会产生

3.days.from.now = [Sat Feb 04 00:00:00 EST 2017]

这不完全符合我的预期。进一步的实验表明,它是相当明智的 - 如果你添加一定精度的持续时间,比如几天,它似乎从"现在"您要将其添加到。如果添加日期或月份,则会减少时间。如果您添加小时数,则使用时间:

1.month.from.now = [Wed Mar 01 00:00:00 EST 2017]
1.hour.from.now = [Wed Feb 01 10:18:42 EST 2017]

为了回到我想要的东西,即在这个精确的时刻增加3天,我尝试了这个:

import groovy.time.TimeCategory
println ""
use(TimeCategory) {
    now = new Date()
    println "now + 3.days = [${now + 3.days}]"
}

这产生了我想要的东西!

now + 3.days = [Sat Feb 04 09:18:42 EST 2017]

但它有点笨重,不得不首先申报日期。经过进一步的实验,我得到了更好的一点:

(3.days + 0.minutes).from.now = [Sat Feb 04 09:18:42 EST 2017]

所以,如果它能够得到满足的话,我可以随意使用它,但感觉我很容易错过更好的方法。是否有一些聪明的方法来指定您想要添加一个月或一定天数,但具有高精度?或者只是一个更好的方式来做到这一般?谢谢!

2 个答案:

答案 0 :(得分:3)

您是否愿意使用java.time

groovy> import java.time.LocalDateTime 
groovy> def threeDays = LocalDateTime.now().plusDays(3) 

Result: 2017-02-04T16:07:19.352

答案 1 :(得分:1)

对于这个确切的问题,这是假设您实际上只需要添加三天而不进行任何其他操作,日期算术的默认groovy行为就足够了:

$ groovysh
Groovy Shell (2.4.7, JVM: 1.7.0_79)
Type ':help' or ':h' for help.
-----------------------------------------------------------------------------------------------------------------------
groovy:000> x = new Date()
===> Wed Feb 01 22:01:17 CET 2017

groovy:000> x + 3
===> Sat Feb 04 22:01:17 CET 2017

groovy:000>