如何在5年前获得

Ham*_*aee 30 java-8

我是java 8的新手,我想要在五年之前获得,这是我的代码:

Instant fiveYearsBefore = Instant.now().plus(-5,
                    ChronoUnit.YEARS);
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit: Years
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我怎么做?

JB *_*zet 39

ZonedDateTime.now().minusYears(5).toInstant()
Run Code Online (Sandbox Code Playgroud)

这将使用您的默认时区来计算时间.如果您想要另一个,请在其中指定now().例如:

ZonedDateTime.now(ZoneOffset.UTC).minusYears(5).toInstant()
Run Code Online (Sandbox Code Playgroud)


小智 11

根据Javadoc,Instant只接受从nanos到days Instant.plus(long amountToAdd,TemporalUnit unit)的时间单位;

您可以使用LocalDateTime.您以相同的方式使用它,但它将支持YEARS级别的操作.

  • 感谢您说明支持哪些 TemporalUnits (2认同)

Mil*_*lan 7

Instant不支持YEARS的加法或减法.

如果您只需要没有时间的日期,则可以使用此LocalDate:

LocalDate date = LocalDate.now();
date = date.plus(-5, ChronoUnit.YEARS);
Run Code Online (Sandbox Code Playgroud)

否则,您可以使用LocalDateTime.

  • 您的第一句话是错误的。“即时”不支持年份-这就是OP出现问题的原因。 (2认同)