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

时间:2018-05-31 11:59:48

标签: java-8 java.time.instant

我的意图是只在一段时间内将条件设置为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)){
}

2 个答案:

答案 0 :(得分:2)

您误解了PeriodDuration是什么。

它们是距离(从结尾开始减去)。 {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。

第二:关于原帖的其他想法:

  1. now 永远不会发生&#34;&#34; periodduration。两者都只是时间量,比如&#34;两天&#34;或者&#34;五分钟&#34;。它们不包含有关开始或结束的信息。

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