检查 Instant 现在是否在 java.time.Period / Duration 期间发生

Check that Instant now happens during the java.time.Period / Duration

我的意图是仅在一段时间内将条件设置为真。

java.time.* API 看起来是我需要的。

import java.time.Period
import java.time.LocalTime
import java.time.Instant
import java.time.Duration

// java.time.Period
LocalTime start = LocalTime.of(1, 20, 25, 1024);
LocalTime end = LocalTime.of(3, 22, 27, 1544);
Period period = Period.between(startDate, endDate);

// java.time.duration
Instant start = Instant.parse("2017-10-03T10:15:30.00Z")
Instant end = Instant.parse("2019-10-03T10:16:30.00Z")
Duration duration = Duration.between(start, end)

Instant now = Instant.now();

如何检查 now 是否在定义的时间段/持续时间内发生?

我看不到直接API。

编辑: 我找到了 java.time.Instant

的方法
// now, start and end are defined above
// if now is between start and end 
if (now.isAfter(start) && now.isBefore(end)){
}

第一:简单的解决方法:

LocalTime start = LocalTime.of(1, 20, 25, 1024);
LocalTime end = LocalTime.of(3, 22, 27, 1544);
LocalTime now = LocalTime.now()

boolean nowIsInTimeWindow = !(now.isBefore(start) || now.isAfter(end));

相同的模式适用于 LocalDate 和 LocalDateTime。

其次:对你原作的补充思考post:

  1. now 永远不会 发生 "during" periodduration。两者都只是时间量,例如 "two days" 或 "five minutes"。它们不包含有关开始或结束的信息。

  2. 我建议不要混合使用 InstantLocalDate,而是使用 LocalTime 而不是 Instant。因此,您在时区方面是一致的:根据定义,Local... 类型与时区无关。

你搞错了 PeriodDuration 是什么。

它们是距离(从结尾减去开头)。 Period 01/03/2018 至 01/10/2018 与 05/04/1990 至 05/11/1990 完全相同,Duration 也是如此。所以这意味着没有什么可以问类似“是 2018 年 1 月 3 日 3 个月?”