1

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

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在定义的 Period/Duration 期间发生的情况?

我没有看到直接的 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)){
}
4

2 回答 2

2

Period你对什么和是什么有误解Duration

它们是距离(从结尾减去开头)。Period2018 年 1 月 3 日至 2018 年 1 月 10 日与 1990 年 5 月 4 日至 1990 年 5 月 11 日之间完全相同,对于Duration. 所以这意味着没有什么可以问类似“ 3 个月后是 2018年1月 3 日吗?”

于 2018-05-31T15:27:57.197 回答
2

第一:一个简单的解决方案:

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永远不会发生在“期间”periodduration。两者都只是时间量,例如“两天”或“五分钟”。它们不包含有关开始或结束的信息。

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

于 2018-05-31T13:10:05.877 回答