我的意图是只在一段时间内将条件设置为true。
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)){
}
答案 0 :(得分:2)
您误解了Period
和Duration
是什么。
它们是距离(从结尾开始减去)。 {03}在01/03/2018和01/10/2018之间的Period
与05/04/1990和05/11/1990之间完全相同,Duration
也是如此。所以这意味着没有什么可以问一些像“是 3个月的<201>
答案 1 :(得分:1)
首先:一个简单的解决方案:
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。
第二:关于原帖的其他想法:
now
永远不会发生&#34;&#34; period
或duration
。两者都只是时间量,比如&#34;两天&#34;或者&#34;五分钟&#34;。它们不包含有关开始或结束的信息。
我建议不要混用Instant
和LocalDate
,而是使用LocalTime
代替Instant
。因此,您在时区方面保持一致:根据定义,Local...
类型与时区无关。