最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 判斷兩個(gè)時(shí)間段是否重疊的案例

 更新時(shí)間:2020年08月15日 11:30:34   作者:SakuyaM  
這篇文章主要介紹了java 判斷兩個(gè)時(shí)間段是否重疊的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

最近業(yè)務(wù)上遇到需要判斷兩個(gè)時(shí)間段是否存在重疊的情況,網(wǎng)上找了不少代碼。大佬們的思路過于簡(jiǎn)潔了,有些理解不了。還只是個(gè)菜鳥碼農(nóng),還是多鍛煉鍛煉自己的思路。

思路很簡(jiǎn)單:定義一個(gè)時(shí)間段的概念,既然是時(shí)間段就包含起始時(shí)間和終止時(shí)間這兩個(gè)時(shí)間點(diǎn)。構(gòu)造方法要保證起始時(shí)間在終止時(shí)間之前,這樣才是一個(gè)有效的時(shí)間段概念。

為TimeSlot這個(gè)類定義四個(gè)比較先后順序的方法,分別為:小于、大于、小于等于、大于等于。畫張簡(jiǎn)單的時(shí)間線圖理解一下就明白了。當(dāng)整個(gè)時(shí)間段作為一個(gè)整體時(shí),只有時(shí)間段小于或大于另一個(gè)時(shí)間段時(shí),它們才沒有重疊的交集。

代碼如下,有什么錯(cuò)誤還請(qǐng)各位看官幫忙指出

package com.abc.common.util;

import lombok.Data;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * 日期工具類
 * <p>
 *   使用LocalDateTime存取或判斷
 * </p>
 * @see java.time.LocalDateTime
 * @date 2020-6-29 10:20:42
 */
@Component
public class DateUtil {

  /**
   * 判斷兩個(gè)時(shí)間段是否重疊
   * @param slot1
   * @param slot2
   * @return
   */
  public static boolean overlapped(TimeSlot slot1, TimeSlot slot2) {
    TimeSlot previous, next;
    previous = slot1.startTime.isBefore(slot2.startTime) ? slot1 : slot2;
    next = slot2.startTime.isAfter(slot1.startTime) ? slot2 : slot1;
    // 這里業(yè)務(wù)需要,允許時(shí)間點(diǎn)的重疊
    // 例如某個(gè)時(shí)間段的起始時(shí)間:2020-06-29 00:00:00
    // 和另一個(gè)時(shí)間段的終止時(shí)間:2020-06-29 00:00:00
    // 它們倆可以有交點(diǎn)。如果不需要這種邏輯只把le改成lt
    // ,ge改成gt就可
    return !(le(previous, next) || ge(previous, next));
  }

  /**
   * 構(gòu)造一個(gè)時(shí)間段
   * @param startTime
   * @param endTime
   * @return
   */
  public static TimeSlot buildSlot(LocalDateTime startTime, LocalDateTime endTime) {
    return new TimeSlot(startTime, endTime);
  }

  /**
   * less equal
   * 小于等于
   * @param prev
   * @param next
   * @return
   */
  private static boolean le(TimeSlot prev, TimeSlot next) {
    return lt(prev, next) || next.endTime.isEqual(prev.startTime);
  }

  /**
   * greater equal
   * 大于等于
   * @param prev
   * @param next
   * @return
   */
  private static boolean ge(TimeSlot prev, TimeSlot next) {
    return gt(prev, next) || prev.endTime.isEqual(next.startTime);
  }

  /**
   * greater than
   * 大于
   * @param prev
   * @param next
   * @return
   */
  private static boolean gt(TimeSlot prev, TimeSlot next) {
    return prev.endTime.isBefore(next.startTime);
  }

  /**
   * less than
   * 小于
   * @param prev
   * @param next
   * @return
   */
  private static boolean lt(TimeSlot prev, TimeSlot next) {
    return next.endTime.isBefore(prev.startTime);
  }

  /**
   * 時(shí)間段類
   */
  @Data
  static class TimeSlot{
    private LocalDateTime startTime;
    private LocalDateTime endTime;

    public TimeSlot(LocalDateTime startTime, LocalDateTime endTime) {
      if (startTime.isAfter(endTime)) {
        this.startTime = endTime;
        this.endTime = startTime;
      } else {
        this.startTime = startTime;
        this.endTime = endTime;
      }
    }
  }
}

在業(yè)務(wù)代碼中調(diào)用:

// ...
 if (DateUtil.overlapped(
 DateUtil.buildSlot(beginTime, endTime),
 DateUtil.buildSlot(beginTime1, endTime1)
 )) {
 // 時(shí)間段有重疊,寫下重疊情況的業(yè)務(wù)代碼
 }
// ...

當(dāng)然也可以把TimeSlot這個(gè)類拎出來,那樣或許更方便。

補(bǔ)充知識(shí):Java計(jì)算Date類時(shí)間差的函數(shù)

我就廢話不多說了,大家還是直接看代碼吧~

 public static String TimeDifference(long start, long end) {
 
    long between = end - start;
    long day = between / (24 * 60 * 60 * 1000);
    long hour = (between / (60 * 60 * 1000) - day * 24);
    long min = ((between / (60 * 1000)) - day * 24 * 60 - hour * 60);
    long s = (between / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
    long ms = (between - day * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000
        - min * 60 * 1000 - s * 1000);
    String timeDifference = day + "天" + hour + "小時(shí)" + min + "分" + s + "秒" + ms
        + "毫秒";
    return timeDifference;
  }

以上這篇java 判斷兩個(gè)時(shí)間段是否重疊的案例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java 文創(chuàng)商城系統(tǒng)的實(shí)現(xiàn)流程

    Java 文創(chuàng)商城系統(tǒng)的實(shí)現(xiàn)流程

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+mysql+maven+tomcat實(shí)現(xiàn)一個(gè)文創(chuàng)商城系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • eclipse springboot工程打war包方法及再Tomcat中運(yùn)行的方法

    eclipse springboot工程打war包方法及再Tomcat中運(yùn)行的方法

    這篇文章主要介紹了eclipse springboot工程打war包方法及再Tomcat中運(yùn)行的方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 5分鐘快速了解String.trim()到底做了什么事

    5分鐘快速了解String.trim()到底做了什么事

    trim方法一般用來去除空格,但是根據(jù)JDK API的說明,該方法并不僅僅是去除空格,它能夠去除從編碼'\u0000'至'\u0020'的所有字符,這篇文章主要給大家介紹了如何通過5分鐘快速了解String.trim()到底做了什么事,需要的朋友可以參考下
    2021-11-11
  • 在X分鐘內(nèi)學(xué)會(huì)C#的入門簡(jiǎn)明教程

    在X分鐘內(nèi)學(xué)會(huì)C#的入門簡(jiǎn)明教程

    C#是一個(gè)優(yōu)雅的、類型安全的面向?qū)ο笳Z(yǔ)言。使用C#,開發(fā)者可以在.NET框架下構(gòu)建安全而強(qiáng)大的應(yīng)用程序,閱讀本文可以快速的入門C#編程語(yǔ)言,需要的朋友可以參考下
    2014-03-03
  • java處理圖片背景顏色的方法

    java處理圖片背景顏色的方法

    這篇文章主要為大家詳細(xì)介紹了java處理圖片背景顏色的方法,藍(lán)底寸照批量轉(zhuǎn)換為白底,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Java分頁(yè)查詢--分頁(yè)顯示(實(shí)例講解)

    Java分頁(yè)查詢--分頁(yè)顯示(實(shí)例講解)

    下面小編就為大家?guī)硪黄狫ava分頁(yè)查詢--分頁(yè)顯示(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Java中的對(duì)象和對(duì)象引用實(shí)例淺析

    Java中的對(duì)象和對(duì)象引用實(shí)例淺析

    這篇文章主要介紹了Java中的對(duì)象和對(duì)象引用,實(shí)例分析了對(duì)象與對(duì)象引用的概念與相關(guān)使用技巧,需要的朋友可以參考下
    2015-05-05
  • logstash將mysql數(shù)據(jù)同步到elasticsearch方法詳解

    logstash將mysql數(shù)據(jù)同步到elasticsearch方法詳解

    這篇文章主要為大家介紹了logstash將mysql數(shù)據(jù)同步到elasticsearch方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • mybatis查詢返回Map<String,Object>類型的講解

    mybatis查詢返回Map<String,Object>類型的講解

    這篇文章主要介紹了mybatis查詢返回Map<String,Object>類型的講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • maven項(xiàng)目install時(shí)忽略執(zhí)行test方法的總結(jié)

    maven項(xiàng)目install時(shí)忽略執(zhí)行test方法的總結(jié)

    這篇文章主要介紹了maven項(xiàng)目install時(shí)忽略執(zhí)行test方法的總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評(píng)論

天祝| 北票市| 施秉县| 修文县| 南昌市| 五河县| 普洱| 湖北省| 邓州市| 工布江达县| 四子王旗| 万州区| 景谷| 丹阳市| 北海市| 兴安盟| 龙泉市| 双峰县| 武定县| 陵水| 长春市| 宣恩县| 西畴县| 阿鲁科尔沁旗| 永新县| 义马市| 乳山市| 新宁县| 江门市| 浏阳市| 抚顺县| 高唐县| 泰宁县| 贵定县| 松滋市| 胶南市| 新疆| 商城县| 铜川市| 石楼县| 弥勒县|