有很多答案,但我无法找到符合我的情况。我需要找到8小时的差异以及日期变化。就像时间大于8小时,然后不执行某些事情。
我们是否有任何方法可以在Java-8中的<input class="form-control" type="text" ng-model="x.name" placeholder="Sensor name" ng-model-options="{ updateOn: 'blur' }" ng-readonly="x.name.length"/>
中实现相同的目标?
我曾试图使用以下但无法实现相同目标。
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;
答案 0 :(得分:10)
以下打印2
,就像您期望的那样。
LocalDateTime ldt1 = LocalDateTime.of(2017, 07, 06, 23, 30, 00);
LocalDateTime ldt2 = LocalDateTime.of(2017, 07, 07, 1, 30, 00);
System.out.println(Duration.between(ldt1, ldt2).toHours());
您的代码没有任何问题。如果您没有得到预期的结果,您可能需要检查您的期望是否正确。
如果差异小于8小时,你可以这样做:
LocalDateTime ldt1 = LocalDateTime.of(2017, 07, 06, 23, 30, 00);
LocalDateTime ldt2 = LocalDateTime.of(2017, 07, 07, 1, 30, 00);
Duration d1 = Duration.between(ldt1, ldt2);
Duration d2 = Duration.ofHours(8);
if (d1.compareTo(d2) > 0) {
System.out.println("do nothing");
} else {
System.out.println("do something");
}
答案 1 :(得分:6)
我的理解是你希望得到这两个日期之间的区别和#34;休息&#34;就这个差异的小时数,分钟数和秒数而言。
您可以使用已经解释过的Duration
类。但Duration
计算的是以秒和纳秒为单位的差异,因此您必须做一些数学运算才能在单独的字段中获得这么多秒数:
LocalDateTime d1 = LocalDateTime.of(2017, 7, 6, 23, 30, 0);
LocalDateTime d2 = LocalDateTime.of(2017, 7, 7, 7, 0, 55);
Duration duration = Duration.between(d1, d2);
// total seconds of difference (using Math.abs to avoid negative values)
long seconds = Math.abs(duration.getSeconds());
long hours = seconds / 3600;
seconds -= (hours * 3600);
long minutes = seconds / 60;
seconds -= (minutes * 60);
System.out.println(hours + " hours " + minutes + " minutes " + seconds + " seconds");
在Java 9及更高版本中,您可以将新的Duration::to…Part
方法调用到get number of days, hours, minutes, or seconds,而不是自己计算数字。
输出将是:
7小时30分55秒
变量hours
,minutes
和seconds
的值分别为7
,30
和55
。如果您还想要纳秒,只需拨打duration.getNano()
即可获得相应的值(在上面的示例中,它是0
)。
如果我使用不同的值进行测试:
LocalDateTime d1 = LocalDateTime.of(2017, 7, 6, 23, 30, 0);
LocalDateTime d2 = LocalDateTime.of(2017, 7, 7, 1, 30, 0);
结果将是:
2小时0分0秒
如果您只想要几小时的差异,可以使用:
ChronoUnit.HOURS.between(d1, d2);
您可以选择使用Math.abs
来避免负值。
这将返回以小时为单位的差异,忽略剩余的分钟数和秒数:在第一个示例(d2 = LocalDateTime.of(2017, 7, 7, 7, 0, 55)
)中,它将返回7
,在第二个示例中(d2 = LocalDateTime.of(2017, 7, 7, 1, 30, 0)
)将返回2
。