1.加减
Temporal 类型有 plus 和 minus 方法来添加或减去java.time.temporal.TemporalAmount提供的参数。
由于Groovy将+和-运算符映射到这些名称的单参数方法,因此可以使用更自然的表达式语法进行加法和减法运算。
def aprilFools = LocalDate.of(2018, Month.APRIL, 1)def nextAprilFools = aprilFools + Period.ofDays(365) // add 365 daysassert nextAprilFools.year == 2019def idesOfMarch = aprilFools - Period.ofDays(17) // subtract 17 daysassert idesOfMarch.dayOfMonth == 15assert idesOfMarch.month == Month.MARCH
Groovy提供了接受整数参数的附加plus和minus方法,从而可以更简洁地重写上述内容:
def nextAprilFools = aprilFools + 365 // add 365 days
def idesOfMarch = aprilFools - 17 // subtract 17 days
这些整数的单位取决于JSR 310类型的操作数。
如上所述,与诸如LocalDate之类的ChronoLocalDate类型一起使用的整数以天为单位。
与Year和YearMonth一起使用的整数分别以年和月为单位。
所有其他类型都以秒为单位,例如LocalTime:
def mars = LocalTime.of(12, 34, 56) // 12:34:56 pm
def thirtySecondsToMars = mars - 30 // go back 30 seconds
assert thirtySecondsToMars.second == 26
2.乘除
*运算符可用于将Period和Duration实例乘以整数值;/运算符可用于将Duration实例除以整数值。
def period = Period.ofMonths(1) * 2 // a 1-month period times 2
assert period.months == 2
def duration = Duration.ofSeconds(10) / 5// a 10-second duration divided by 5
assert duration.seconds == 2
3.递增递减
++和--运算符可用于将日期/时间值递增和递减一个单位。 由于 JSR 310 类型是不可变的,因此该操作将创建一个具有递增/递减值的新实例并将其重新分配给引用。
def year = Year.of(2000)
--year // decrement by one year
assert year.value == 1999
def offsetTime = OffsetTime.of(0, 0, 0, 0, ZoneOffset.UTC) // 00:00:00.000 UTC
offsetTime++ // increment by one second
assert offsetTime.second == 1
4.取反
Duration 和Period 类型表示负或正的时间长度。这些可以用一元-运算符求反。
def duration = Duration.ofSeconds(-15)
def negated = -duration
assert negated.seconds == 15
