获取日期列表中的连续日期,且表示成*年*月*日~*年*月*日

#coding:utf-8
#作者    :思
#创建时间:2021/12/16 14:36 
#功能    :获取日期列表中的连续日期,且表示成*年*月*日~*年*月*日
import numpy as np
from itertools import groupby
import datetime
dlist = ['2021-03-01', '2021-04-01', '2021-06-06', '2021-06-25', '2021-06-26',
       '2021-06-27', '2021-07-28', '2021-08-29','2021-08-30','2021-08-31','2021-09-01']

def calculate_consecutive_dates(dlist):
    dates = [datetime.datetime.strptime(i, "%Y-%m-%d").date() for i in dlist]
    date_ints = [d.toordinal() for d in dates]
    print(date_ints)

    reslist = []
    fun = lambda x: x[1]-x[0]
    for k, g in groupby(enumerate(date_ints), fun):
        l1 = [j for i, j in g ]    # 连续数字的列表

        if len(l1)>2:#时间连续的点超过2天
            conl_start = datetime.date.fromordinal(l1[0])
            conl_end = datetime.date.fromordinal(l1[-1])
            conl_start = conl_start.strftime("%Y-%m-%d")
            conl_end = conl_end.strftime("%Y-%m-%d")
            conl_str = conl_start+'~'+conl_end
            print(conl_start,conl_end)
            print(conl_str)
            reslist.append(conl_str)
        else:
            for i in l1:
                i = datetime.date.fromordinal(i)
                i = i.strftime("%Y-%m-%d")
            reslist.append(i)
    print(reslist)
    # print(','.join(reslist))
    # ['2021-03-01', '2021-04-01', '2021-06-06', '2021-06-25~2021-06-27', '2021-07-28', '2021-08-29~2021-09-01']


if __name__ == '__main__':
    calculate_consecutive_dates(dlist)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值