首页 > 其他分享 >给定一系列日期区间,求这段日期区间的交集

给定一系列日期区间,求这段日期区间的交集

时间:2024-09-15 17:02:55浏览次数:1  
标签:end 交集 Y% days datetime start 日期 time 区间

def CountDays(start_time, end_time, time_interval_list):
    from datetime import datetime, timedelta
    
    time_a = []
    for start, end in time_interval_list:
        if end is None:
            end = end_time
        time_a.append([datetime.strptime(start, '%Y%m%d'),
                       datetime.strptime(end, '%Y%m%d')])

    start_time = datetime.strptime(start_time, '%Y%m%d')
    end_time = datetime.strptime(end_time, '%Y%m%d')

    corrected_time_a = []
    for s, e in time_a:
        if e < start_time or s > end_time:
            continue
        elif s <= start_time <= e:
            s = start_time
        elif s <= end_time <= e:
            e = end_time
        corrected_time_a.append([s, e])
    if len(corrected_time_a) == 0:
        return (end_time - start_time).days + 1, 0

    b = []
    for begin, end in sorted(corrected_time_a):
        if b and b[-1][1] >= begin - timedelta(days=1):
            b[-1][1] = max(b[-1][1], end)
        else:
            b.append([begin, end])

    occupied_days = sum((j-i).days + 1 for i, j in b)
    free_days = (end_time - start_time).days + 1 - occupied_days
    return free_days, occupied_days


CountDays('20221020', '20240531',
          [['20221005', '20221221'],
           ['20231204', '20231231'],
           ['20210402', '20210502'],
           ['20240402', '20240402']])

CountDays('20211020', '20220531',
          [['20221005', '20221221'],
           ['20231204', '20231231'],
           ['20210402', '20210502'],
           ['20240402', '20240402'],
           ['20221005', None]])

求日期区间的并集的代码思路参考自Union of multiple ranges

标签:end,交集,Y%,days,datetime,start,日期,time,区间
From: https://www.cnblogs.com/Enjoy-Respect-9527/p/18415414

相关文章

  • 帝国cms 日期目录 生成函数是什么
    在帝国CMS中,日期目录通常用于组织和存储生成的静态页面文件。日期目录的生成函数并不是直接提供的一个函数,而是通过帝国CMS的后台设置和模板标签来实现的。当你在帝国CMS后台进行栏目设置时,可以选择不同的目录存放形式。例如,你可以设置内容页目录存放形式为包含日期的形式,这样生......
  • hive表修改分区数据日期
    鱼弦:公众号:红尘灯塔,CSDN内容合伙人、CSDN新星导师、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)Hive表修改分区数据日期Hive表修改分区数据日期的方法如下:1.使用ALTERTABLE语句:ALTERTABLEtable_nameALTER......
  • 每日OJ_牛客_NC313 两个数组的交集
    目录牛客_NC313 两个数组的交集解析代码牛客_NC313 两个数组的交集两个数组的交集_牛客题霸_牛客网classSolution{public:/***代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可***@paramnums1int整型vec......
  • 算法工程师重生之第二天(长度最小的子数组 螺旋矩阵II 区间和 开发商购买土地 总结 )
    参考文献代码随想录一、长度最小的子数组给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl,numsl+1,...,numsr-1,numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示......
  • 【办公类】幼儿健康数据模版批量更改日期(保健老师填写)
    背景需求今天下发通知三个园区的保健老师需要填写1.2023学年(202406)的六一体检数据2.2024学年(202409)的新生入园体检数据我先把上一轮填写过的数据模版下载下来(套用模版)把EXCEL下载到原始文件夹里模版下载完成,我想到去年2023年9月用这些前年2022年9月的模版发给保......
  • Java8中日期类的使用
    LocalDate:日期类LocalTime:时间类LocalDateTime:日期时间类相关操作创建时间privatestaticvoiddateTimeAndFormat(){//当前日期时间LocalDatedate1=LocalDate.now();//指定日期时间LocalDatedate2=LocalDate.of(2025,6,6);......
  • 时间日期工具类
    时间日期工具类importjava.time.*;importjava.time.format.DateTimeFormatter;importjava.time.temporal.ChronoUnit;publicclassDateTimeUtils{privatestaticfinalStringDEFAULT_DATE_FORMAT="yyyy-MM-dd";privatestaticfinalStringDEFA......
  • LEETCODE 1709 两个日期的最大空档期
      表: UserVisits+-------------+------+|ColumnName|Type|+-------------+------+|user_id|int||visit_date|date|+-------------+------+该表没有主键,它可能有重复的行该表包含用户访问某特定零售商的日期日志。 假设今天的日期是 '2021-1-1......
  • LeetCode56. 合并区间(2024秋季每日一题 16)
    以数组intervals表示若干个区间的集合,其中单个区间为intervals[i]=[starti,endi]。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例1:输入:intervals=[[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间[1,3]......
  • Pbootcms将日期时间转换成"刚刚、几分钟、几小时前"的形式
    为了实现类似于“刚刚;1小时前;昨天几点几分;前天几点几分;年月日几点几分”的个性化日期效果,你需要按照以下步骤进行操作:找到 ExtLabelController.php 文件。添加新的方法 transtime。在 run 方法中调用 transtime 方法。在模板页面中使用该标签。具体步骤1.找到......