Java 8 检查现在在java.time.Period/Duration期间发生的瞬间

Java 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

我的意图是仅在一段时间内将条件设置为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();
如何检查
现在是否在定义的期间/持续时间内发生

我看不到直接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()在所有地方都应该相同。在我看来并不奇怪。这两门课都不是关于时间窗的,只是测量时间的流逝。想象一下,你会问:“五小时六分钟是什么时候开始的?”这是毫无意义的。