为什么 ChronoUnit.HOURS.between() 不起作用?
Why ChronoUnit.HOURS.between() is NOT working?
我试图获取两个本地日期之间的时间。我使用了下面的代码:
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)
错误 1
如例外情况所述:您需要连贯的边界值,LocalTime
没有 day/month/year 可与 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
,因为它们具有 none。
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
注意 LocalDate
没有时间部分,LocalTime
没有日期部分。因此,您的代码试图计算 2000-04-30(未指定时间)与当前本地时间(未指定日期)之间的小时数。看到问题了吗?
你的意思可能是,
How many hours are there, between today at the current local time, and 2000-04-30 at the start of that day (or some other time that day)?
这个计算需要两个“日期+时间”,而不是一个日期和一个时间。我们用 LocalDateTime
.
表示
long noOfHours = startDate.atStartOfDay().until(LocalDateTime.now(), ChronoUnit.HOURS);
注意 LocalDateTime.now()
和 atStartOfDay
,其中 returns LocalDateTime
s.
如果您想在 2000-04-30 使用另一个时间,请使用 startDate.atTime(...)
,或者首先创建一个 LocalDateTime
,例如
LocalDateTime startDate = LocalDateTime.of(2000, 4, 30, 12, 30);
我试图获取两个本地日期之间的时间。我使用了下面的代码:
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)
错误 1
如例外情况所述:您需要连贯的边界值,LocalTime
没有 day/month/year 可与 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
,因为它们具有 none。
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
注意 LocalDate
没有时间部分,LocalTime
没有日期部分。因此,您的代码试图计算 2000-04-30(未指定时间)与当前本地时间(未指定日期)之间的小时数。看到问题了吗?
你的意思可能是,
How many hours are there, between today at the current local time, and 2000-04-30 at the start of that day (or some other time that day)?
这个计算需要两个“日期+时间”,而不是一个日期和一个时间。我们用 LocalDateTime
.
long noOfHours = startDate.atStartOfDay().until(LocalDateTime.now(), ChronoUnit.HOURS);
注意 LocalDateTime.now()
和 atStartOfDay
,其中 returns LocalDateTime
s.
如果您想在 2000-04-30 使用另一个时间,请使用 startDate.atTime(...)
,或者首先创建一个 LocalDateTime
,例如
LocalDateTime startDate = LocalDateTime.of(2000, 4, 30, 12, 30);