检查 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:
now
将 永远不会 发生 "during" period
或 duration
。两者都只是时间量,例如 "two days" 或 "five minutes"。它们不包含有关开始或结束的信息。
我建议不要混合使用 Instant
和 LocalDate
,而是使用 LocalTime
而不是 Instant
。因此,您在时区方面是一致的:根据定义,Local...
类型与时区无关。
你搞错了 Period
和 Duration
是什么。
它们是距离(从结尾减去开头)。 Period
01/03/2018 至 01/10/2018 与 05/04/1990 至 05/11/1990 完全相同,Duration
也是如此。所以这意味着没有什么可以问类似“是 2018 年 1 月 3 日 3 个月?”
我的意图是仅在一段时间内将条件设置为真。
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:
now
将 永远不会 发生 "during"period
或duration
。两者都只是时间量,例如 "two days" 或 "five minutes"。它们不包含有关开始或结束的信息。我建议不要混合使用
Instant
和LocalDate
,而是使用LocalTime
而不是Instant
。因此,您在时区方面是一致的:根据定义,Local...
类型与时区无关。
你搞错了 Period
和 Duration
是什么。
它们是距离(从结尾减去开头)。 Period
01/03/2018 至 01/10/2018 与 05/04/1990 至 05/11/1990 完全相同,Duration
也是如此。所以这意味着没有什么可以问类似“是 2018 年 1 月 3 日 3 个月?”