代码之家  ›  专栏  ›  技术社区  ›  Raymond Chenon

检查instant现在是否在java.time.period/duration期间发生

  •  1
  • Raymond Chenon  · 技术社区  · 6 年前

    我的目的是只在一段时间内将条件设置为真。

    这个 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 回复  |  直到 6 年前
        1
  •  2
  •   Jean-Baptiste Yunès    6 年前

    你搞错了 Period Duration 是。

    他们是 距离 (从结尾减去开头)。 周期 2018年3月1日至2018年10月1日期间与1990年4月5日至1990年11月5日期间完全相同, 持续时间 . 所以这没什么好问的 2018年1月3日 在里面 3个月

        2
  •  1
  •   Amadán    6 年前

    首先:一个简单的解决方案:

    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 从未 发生在“期间” period duration . 两者都只是时间,比如“两天”或“五分钟”。它们不包含关于开始或结束的信息。

    2. 我建议不要混在一起 Instant LocalDate 但是使用 LocalTime 而不是 瞬间 . 所以你在时区上是一致的 Local... 根据定义,类型是时区不可知的。

    推荐文章