【发布时间】:2017-07-07 10:15:35
【问题描述】:
给出了许多答案,但我无法找到与我的情况相符的答案。我还需要找到 8 小时的时间差以及日期变化。如果时间大于 8 小时,则不要执行某些操作。
我们是否有任何方法可以在 Java-8 中的 LocalDateTime 中实现相同的功能?
我尝试使用以下但无法实现相同的效果。
LocalDateTime fromDateTime = LocalDateTime.of(2017, 07, 07, 07, 00, 55);
LocalDateTime toDateTime = LocalDateTime.now();
LocalDateTime tempDateTime = LocalDateTime.from(fromDateTime);
long years = tempDateTime.until(toDateTime, ChronoUnit.YEARS);
tempDateTime = tempDateTime.plusYears(years);
long months = tempDateTime.until(toDateTime, ChronoUnit.MONTHS);
tempDateTime = tempDateTime.plusMonths(months);
long days = tempDateTime.until(toDateTime, ChronoUnit.DAYS);
tempDateTime = tempDateTime.plusDays(days);
long hours = tempDateTime.until(toDateTime, ChronoUnit.HOURS);
tempDateTime = tempDateTime.plusHours(hours);
long minutes = tempDateTime.until(toDateTime, ChronoUnit.MINUTES);
tempDateTime = tempDateTime.plusMinutes(minutes);
long seconds = tempDateTime.until(toDateTime, ChronoUnit.SECONDS);
System.out.println("" + java.time.Duration.between(tempDateTime, toDateTime).toHours());
System.out.println(years + " years "
+ months + " months "
+ days + " days "
+ hours + " hours "
+ minutes + " minutes "
+ seconds + " seconds.");
很难单独检查时间和日期。
最初我是这样编码的,但它看起来不正确:
return openBrat!=null
&& openBrat.until(LocalDateTime.now(), ChronoUnit.DAYS) == 0 &&
openBrat.until(LocalDateTime.now(), ChronoUnit.HOURS) >= 8
&& openBrat.until(LocalDateTime.now(), ChronoUnit.Minutes) >= 0;
谁能建议如何减法:
2017 07 06 23:30:00 - 2017 07 07 01:30:00 - Should return 2 hours.
【问题讨论】:
-
你也可以使用
ChronoUnit.HOURS.between(date1, date2) -
你知道
LocalDateTime故意没有时区的概念吗?因此,使用该类意味着您将忽略任何异常情况,例如夏令时 (DST)。如果你想考虑这样的现实,请使用ZonedDateTime。
标签: date datetime java-8 datediff