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