Java 如何在5年前得到现在

Java 如何在5年前得到现在,java,java-8,Java,Java 8,我是java 8的新手,我正试图在五年前获得成功,以下是我的代码: Instant fiveYearsBefore = Instant.now().plus(-5, ChronoUnit.YEARS); 但我得到了以下错误: java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit: Years 有人能帮我怎么做吗?Instant不支持加减年份 如果只需要日期而不需要时间

我是java 8的新手,我正试图在五年前获得成功,以下是我的代码:

Instant fiveYearsBefore = Instant.now().plus(-5,
                    ChronoUnit.YEARS);
但我得到了以下错误:

java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit: Years

有人能帮我怎么做吗?

Instant不支持加减年份

如果只需要日期而不需要时间,则可以使用此LocalDate:

LocalDate date = LocalDate.now();
date = date.plus(-5, ChronoUnit.YEARS);
否则,您可以使用LocalDateTime

ZonedDateTime.now().minusYears(5).toInstant()
这将使用默认时区来计算时间。如果需要另一个,请在
now()
中指定它。例如:

ZonedDateTime.now(ZoneOffset.UTC).minusYears(5).toInstant()

根据Javadoc,Instant只接受从纳秒到天的时间单位


你可以用。您使用它的方式相同,但它将支持年级别的操作。

如果您愿意,它不需要日期-时间转换

Instant.now().minus(Period.ofYears(5).getDays(),ChronoUnit.DAYS);

我也遇到了同样的例外,但有几个月了。这有点误导,因为编译时不会抛出错误或警告之类的东西。 无论如何,我也阅读了文档:

是的,不幸的是,所有其他ChronoUnit类型都不受支持

幸运的是,LocalDateTime也可以减去月份和年份

LocalDateTime.now().minusYears(yearsBack)

LocalDateTime.now().minusMonths(monthsBack)


试着更准确地说明你5年前的意思。一年不是一个固定的持续时间单位。有些年份比其他年份长一些。你想要5年前的今天吗?或者您想在5*365天前使用它?调用
new FlyingDelorean().Builder.speed(88.unit)(单位:英里/小时).build()相关:时间数学不容易。想象瞬间对应于2012年2月29日13:00。瞬加(-1,ChronoUnit.YEARS)应该返回什么?无论你认为它应该返回什么,现在想想什么瞬间。加号(-1,ChronoUnit.YEARS)。加号(1,ChronoUnit.YEARS)返回。你的第一句话是错的<代码>即时
不支持年份-这就是OP出现问题的原因。Thnx!这是一个打字错误,不起作用!Java太令人失望了!甚至不按它说的做
Period.ofYears(5).getDays()的值实际上是0
getDays()
完全按照它所说的做。看看JavaDoc:结果周期将具有指定的月份。年和天的单位为零。这对我来说很有效:
Instant.now().减号(5*365L,ChronoUnit.days)
你不知道五年中有多少天是以
Period.of years(5).getDays()计算的。这是一个毫无意义的问题,因为你还没有具体说明是哪几年。这可能是闰年,也可能不是。天数会有所不同。感谢您说明支持哪些临时单位