为什么chronounit.hours.between()不起作用?

w51jfk4q  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(418)

我想知道两次当地约会之间的时间。我使用了下面的代码:

LocalDate startDate =  LocalDate.of(2000, 4, 30);

    long noOfHours = startDate.until(LocalTime.now(), ChronoUnit.HOURS);

    System.out.println(noOfHours);

我有以下错误:

Exception in thread "main" java.time.DateTimeException: Unable to obtain LocalDate from TemporalAccessor: 13:44:53.095819600 of type java.time.LocalTime
    at java.base/java.time.LocalDate.from(LocalDate.java:397)
    at java.base/java.time.LocalDate.until(LocalDate.java:1645)
    at BirthDay.App.main(App.java:36)
mf98qq94

mf98qq941#

错误1

正如例外情况所述:您需要一致的界限值, LocalTime 没有日/月/年成分可与 LocalDate ```
LocalDate startDate = LocalDate.of(2000, 4, 30);
long noOfHours = startDate.until(LocalTime.now(), ChronoUnit.HOURS);
// >> DateTimeException: Unable to obtain LocalDate from java.time.LocalTime


#### 错误2

此外,您还需要具有所需单位的成分 `ChronoUnit` ,使用2 `LocalDate` 不会和你一起工作 `HOURS` 因为他们没有。

LocalDate startDate = LocalDate.of(2000, 4, 30);
long noOfHours = startDate.until(LocalDate.now(), ChronoUnit.HOURS);
// >> UnsupportedTemporalTypeException: Unsupported unit: Hours

使用 `LocalDateTime` 因此,在边界和单位时间内保持一致

LocalDateTime startDate = LocalDateTime.of(2000, 4, 30, 0, 0, 0);
long noOfHours = startDate.until(LocalDateTime.now(), ChronoUnit.HOURS);
System.out.println(noOfHours); // 185793

ukdjmx9f

ukdjmx9f2#

注意 LocalDate 没有时间成分,并且 LocalTime 没有日期组件。因此,您的代码试图计算2000-04-30(未指定时间)和当前本地时间(未指定日期)之间的小时数。看到问题了吗?
你的意思可能是,
从今天的当地时间到那天开始的2000-04-30(或那天的其他时间),一共有多少小时?
此计算需要两个“日期+时间”,而不是一个日期和一个时间。我们对此表示赞同 LocalDateTime .

long noOfHours = startDate.atStartOfDay().until(LocalDateTime.now(), ChronoUnit.HOURS);

LocalDateTime.now()atStartOfDay ,返回 LocalDateTime S
如果您想在2000-04-30使用其他时间,请使用 startDate.atTime(...) ,或创建一个 LocalDateTime 首先,例如。

LocalDateTime startDate =  LocalDateTime.of(2000, 4, 30, 12, 30);

相关问题