Java 8 检查现在在java.time.Period/Duration期间发生的瞬间
我的意图是仅在一段时间内将条件设置为trueJava 8 检查现在在java.time.Period/Duration期间发生的瞬间,java-8,java.time.instant,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
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();
如何检查现在是否在定义的期间/持续时间内发生
我看不到直接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
第二:关于您的原始帖子的其他想法:
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));
现在
将不会在“期间
或持续时间
期间发生。两者都只是时间量,比如“两天”或“五分钟”。它们不包含关于开始或结束的信息
我建议不要混合使用Instant
和LocalDate
,而是使用LocalTime
而不是Instant
。因此,您在时区方面是一致的:Local…
类型根据定义是时区不可知的
首先:一个简单的解决方案:
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
第二:关于您的原始帖子的其他想法:
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));
现在
将不会在“期间
或持续时间
期间发生。两者都只是时间量,比如“两天”或“五分钟”。它们不包含关于开始或结束的信息
我建议不要混合使用Instant
和LocalDate
,而是使用LocalTime
而不是Instant
。因此,您在时区方面是一致的:Local…
类型根据定义是时区不可知的
您错误地理解了期间
和持续时间
是什么
它们是距离(从起点减去终点)<2018年3月1日至2018年10月1日之间的代码>期间
与1990年4月5日至1990年11月5日期间完全相同,期间
。因此,这意味着没有什么可以问“2018年1月3日是3个月吗?”您对期间和持续时间的理解是错误的
它们是距离(从起点减去终点)<2018年3月1日至2018年10月1日之间的代码>期间
与1990年4月5日至1990年11月5日期间完全相同,期间
。因此,这意味着没有什么可以问“2018年1月3日是3个月吗?”你采用了我在“编辑”中给出的解决方案:)看起来很奇怪,期间/持续时间
没有API来检查即时
是否在他们的时间窗口中,而我还在写anser时,你太快就发现了仍然:不要轻易地混合本地时间和即时时间!LocalTime.now()可能因您在地球上的位置而异。Instant.now()在所有地方都应该相同。在我看来并不奇怪。这两门课都不是关于时间窗的,只是测量时间的流逝。想象一下,问:“五小时六分钟是什么时候开始的?”这是没有意义的。你采用了我在“编辑”中给出的解决方案:)看起来很奇怪,期间/持续时间
没有API来检查瞬间
是否在他们的时间窗口中,而我还在写anser时,你发现得太快了仍然:不要轻易地混合本地时间和即时时间!LocalTime.now()可能因您在地球上的位置而异。Instant.now()在所有地方都应该相同。在我看来并不奇怪。这两门课都不是关于时间窗的,只是测量时间的流逝。想象一下,你会问:“五小时六分钟是什么时候开始的?”这是毫无意义的。