1.加减

Temporal 类型有 plusminus 方法来添加或减去java.time.temporal.TemporalAmount提供的参数。
由于Groovy将+和-运算符映射到这些名称的单参数方法,因此可以使用更自然的表达式语法进行加法和减法运算。

  1. def aprilFools = LocalDate.of(2018, Month.APRIL, 1)
  2. def nextAprilFools = aprilFools + Period.ofDays(365) // add 365 days
  3. assert nextAprilFools.year == 2019
  4. def idesOfMarch = aprilFools - Period.ofDays(17) // subtract 17 days
  5. assert idesOfMarch.dayOfMonth == 15
  6. assert idesOfMarch.month == Month.MARCH

Groovy提供了接受整数参数的附加plusminus方法,从而可以更简洁地重写上述内容:

def nextAprilFools = aprilFools + 365 // add 365 days
def idesOfMarch = aprilFools - 17 // subtract 17 days

这些整数的单位取决于JSR 310类型的操作数。
如上所述,与诸如LocalDate之类的ChronoLocalDate类型一起使用的整数以为单位。
YearYearMonth一起使用的整数分别以为单位。
所有其他类型都以为单位,例如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.乘除

*运算符可用于将PeriodDuration实例乘以整数值;
/运算符可用于将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.取反

DurationPeriod 类型表示负或正的时间长度。这些可以用一元-运算符求反。

def duration = Duration.ofSeconds(-15)
def negated = -duration
assert negated.seconds == 15