提取任意开始年月日到结束年月日中间的所有日期和星期

news2024/11/23 17:03:28

🍿*★,°*:.☆欢迎您/$:*.°★* 🍿


 


分为三种情况

1 同年同月不通日

2 同年不同月

3不同年 不同年分为 两种情况

一种是开始年

开始年月不是12月的要单独计算

一种是结束年

结束年要不是1月的要单独计算

同时每种情况结尾天数分割也不同

#!/usr/bin/python
# -*- coding: utf-8 -*-

import pandas as pd
import calendar
import numpy as np


def get_day_date(start_year, start_month):
    start_month_table = calendar.month(int(start_year), int(start_month))
    start_month_table = pd.DataFrame(start_month_table.split("\n")[2:])
    start_month_table = start_month_table[start_month_table[0] != ""]
    start_month_table = start_month_table[0].str.split()
    first_index = 7 - len(start_month_table.values[0])
    month_day = np.hstack(start_month_table.values.tolist())
    end_index = month_day.size
    month_date = ([1, 2, 3, 4, 5, 6, 7] * 6)[first_index:first_index + end_index]
    return month_day.astype("int"), month_date


def get_muti_month(month_range, start_year, start_month, start_day, end_day):
    date_data = []
    for i in range(0, month_range + 1):
        if i == month_range:
            # 结尾月 截取结尾
            new_df = pd.DataFrame()
            month_day, month_date = get_day_date(start_year, str(int(start_month) + i))
            month_day, month_date = month_day[:int(end_day)], month_date[:int(end_day)]
        elif i == 0:
            # 开始月截取开始
            new_df = pd.DataFrame()
            month_day, month_date = get_day_date(start_year, str(int(start_month) + i))
            month_day, month_date = month_day[int(start_day) - 1:len(month_day)], month_date[
                                                                                  int(start_day) - 1:len(month_day)]
        else:
            new_df = pd.DataFrame()
            month_day, month_date = get_day_date(start_year, str(int(start_month) + i))
            month_day, month_date = month_day[:len(month_day)], month_date[:len(month_day)]

        new_df["year"] = [start_year] * len(month_day)
        new_df["month"] = [str(int(start_month) + i)] * len(month_day)
        new_df["day"] = np.array(month_day).astype("str")
        new_df["date"] = month_date
        date_data.append(new_df)
    date_data = pd.concat(date_data).copy()
    date_data["year_month_day"] = date_data["year"] + "-" + date_data["month"] + "-" + date_data["day"]
    return date_data


def sp_date_every_day_month(satrt_date, end_date):
    start_year, start_month, start_day = satrt_date.split("-")
    end_year, end_month, end_day = end_date.split("-")

    if start_year == end_year and start_month == end_month:
        # 不跨年不跨年  只需要使用  开始结束日期限定即可
        new_df = pd.DataFrame()
        month_day, month_date = get_day_date(start_year, start_month)
        month_day, month_date = month_day[int(start_day) - 1:int(end_day)], month_date[int(start_day) - 1:int(end_day)]

        new_df["year"] = [start_year] * len(month_day)
        new_df["month"] = [start_month] * len(month_day)
        new_df["day"] = np.array(month_day).astype("str")
        new_df["date"] = month_date
        new_df["year_month_day"] = new_df["year"] + "-" + new_df["month"] + "-" + new_df["day"]
        return new_df


    elif start_year == end_year and start_month != end_month:
        # 不跨年跨月
        month_range = int(end_month) - int(start_month)
        new_df = get_muti_month(month_range, start_year, start_month, start_day, end_day)
        return new_df


    elif start_year != end_year:
        # 至多 跨一年
        date_list = []
        if start_month == "12":
            new_df = pd.DataFrame()
            month_day, month_date = get_day_date(start_year, start_month)
            month_day, month_date = month_day[int(start_day) - 1:len(month_day)], month_date[
                                                                                  int(start_day) - 1:len(month_day)]
            new_df["year"] = [start_year] * len(month_day)
            new_df["month"] = [start_month] * len(month_day)
            new_df["day"] = month_day.astype("str")
            new_df["date"] = month_date
            new_df["year_month_day"] = new_df["year"] + "-" + new_df["month"] + "-" + new_df["day"]
            date_list.append(new_df)

        else:
            month_range = 12 - int(start_month)
            new_df = get_muti_month(month_range, start_year, start_month, start_day, str(31))
            date_list.append(new_df)

        if end_month == "1":
            new_df = pd.DataFrame()
            month_day, month_date = get_day_date(end_year, end_month)
            month_day, month_date = month_day[:int(end_day)], month_date[:int(end_day)]
            new_df["year"] = [end_year] * len(month_day)
            new_df["month"] = [end_month] * len(month_day)
            new_df["day"] = month_day.astype("str")
            new_df["date"] = month_date
            new_df["year_month_day"] = new_df["year"] + "-" + new_df["month"] + "-" + new_df["day"]
            date_list.append(new_df)

        else:
            month_range = int(end_month) - 1
            new_df = get_muti_month(month_range, end_year, "1", "1", end_day)
            date_list.append(new_df)
        return pd.concat(date_list)


if __name__ == '__main__':
    res = sp_date_every_day_month("2022-10-3", "2022-12-24")
    print()


总结

        具体能做什么那就看自己的了

        比如可以使用到 某些关于日期 排版 等场景上的数据筛选处理

        比如执行任务计划 

        比如上班 分星期 

        比如上学课程表

        


  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由东方佑原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/101568.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

玉湖冷链首次参展中国冷链产业年会

洞见时代,探冬寻暖。12月15-17日,「2022第十六届中国冷链产业年会」在厦门举行。玉湖冷链深度参与行业盛会,首次设展,与上千名行业人士进行了深入交流,并参与了中物联冷链委四届三次理事会和主论坛首席对话等环节。 年…

JaveWeb框架(二):Servlet组件入门

Servlet入门 MVC实战项目 仓储管理系统Servlet 入门DemoServlet 执行流程、生命周期执行流程生命周期Servlet API介绍Servlet体系结构Servlet urlPattern配置Servlet:请求与响应Request:请求请求的构成请求API方法来获取对应的值:请求参数的获取方式请求…

后台系统权限流程

菜单管理 角色管理 相关逻辑 <template><div><a-tree :checkable"true"check"handlerChecked"select"handlerSelectNode"/></div> </template><script> export default { data(){return {// 选中节点的ke…

宠物领养网站

成品详细信息 开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 基于java的宠物领养管理系统用户模块包括注册登录、个人信息管理、 可领养宠物信息查询、宠物助养信息查…

Java注册登录及邮箱发送账号激活(主要技术栈SpringBoot,MyBatis)

文章目录前言学习之前需要掌握的知识项目环境搭建数据库的搭建前端页面的搭建后端代码格式pojomapperControllerservice最后前言 项目流程图如下&#xff1a; 这里我们通过&#xff1a; 163邮箱来实现激活码发送qq邮箱来进行接收 学习之前需要掌握的知识 springboot的基本使…

解决tinypng 1.0.6 在线压缩C#接口报ssl错误的方法

因为作者的做法是使用了他们的证书, 但是如果是插件引用, 感觉是无法调用的. 所以我们直接下载code 修改这里即可 namespace TinifyAPI.Internal internal static class SSL public static bool ValidationCallback(HttpRequestMessage req, X509Certificate2 cert, X509Chain…

二十四节气-冬至,海报/文案分享,一口饺子,一口吉。

古说&#xff0c;冬至是阴极之至 阳气始生&#xff0c;有冬至大如年的说法 冬至到&#xff0c;家家户户吃水饺&#xff0c; “冬至不端饺子碗&#xff0c;冻掉耳朵没人管” “三九补一冬&#xff0c;来年无病痛” 可吃羊肉等温补…… 一组超级好的大牌文案 真心秀色可餐 下面是…

selenium自动化测试——unittest框架

文章目录unittestunittest 框架组成细节unittest测试示例用例的执行顺序忽略测试用例的执行unittest断言HTML报告生成生成HTML报告步骤异常捕捉与错误截图数据驱动unittest unittest 是python 的单元测试框架&#xff0c; 在python 的官方文档中&#xff0c;对unittest有详细的…

学会JVM,从这篇开始

目录 一、了解 JVM 二、JVM内存划分 三、类加载 1. 类加载是干啥的? 什么是类对象 ? 2. 类加载的大致过程 3. 什么是 双亲委派模型(重点) ? 四、GC 1. GC回收的是哪里的内存 2. 回收如何判断某个对象是否是垃圾? ① 引用计数(Python PHP采用) ② 可达性分析(JVM采用) 3. …

【计算机考研408】2023考研408大题预测总结

数据结构 链表相关算法题 反转链表1 题源1&#xff1a;反转链表1 比较简单&#xff0c;可以作为思想记忆&#xff0c;不太会这么直接考察 408可能考察链表的实现&#xff0c; ListNode* reverseList(ListNode* head) {if(head NULL) return NULL;//头插法ListNode * p …

计算机毕设Python+Vue学生健康管理系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

jsp+ssm计算机毕业设计二手车交易系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

(八) mysql主从以及Redis集群

mysql主从以及Redis集群一、Mysq主从复制安装1、新建主服务器容器实例33072、进入/mydata/mysql-master/conf目录下新建my.cnf3、进入mysql-master容器4、master容器实例内创建数据同步用户5、新建从服务器容器实例33086、创建从机的配置文件7、在主数据库中查看主从同步状态8、…

Linux——shell及其基本命令

一、认识shell Shell是一个命令语言解释器。登陆Linux后&#xff0c;所有的命令都被shell解释&#xff0c;它支持函数、变量、数组、程序设计结构等。分为Bourne Shell和 C Shell&#xff0c;红帽默认Bash&#xff0c;是B Shell的扩展&#xff0c;完全兼容。 1&#xff0e;启…

python中使用马尔可夫决策过程(MDP)动态编程来解决最短路径强化学习问题

在强化学习中&#xff0c;我们有兴趣确定一种最大化获取奖励的策略。最近我们被客户要求撰写关于MDP的研究报告&#xff0c;包括一些图形和统计输出。假设环境是马尔可夫决策过程 &#xff08;MDP&#xff09;的理想模型 &#xff0c;我们可以应用动态编程方法来解决强化学习…

【C++】STL——stack和queue的介绍与使用及模拟实现

stack和queue的介绍与使用及模拟实现 文章目录stack和queue的介绍与使用及模拟实现1.stack的介绍与使用1.1.stack的介绍1.2.stack的使用1.3.stack的模拟实现2.queue的介绍和使用2.1.queue的介绍2.2.queue的使用2.3.queue的模拟实现3. 容器适配器3.1.STL标准库中stack和queue的底…

分享15个全球顶尖的AIGC图片生成平台

人工智能正在改变许多行业的格局&#xff0c;而其中改变最直观和影响最大的就是AIGC领域的图像创作。 发展至今已经有很多AI图像生成平台&#xff0c;他们的共同特点就是使用人工智能将文本转换为图像&#xff0c;这是一次革命性的突破&#xff0c;也就是说通过这些AI工具可以…

springboot多数据源---3多数据源组件

一、dynamic-datasource多数源组件 两三个数据源、事务场景比较少 基于 SpringBoot 的多数据源组件&#xff0c;功能强悍&#xff0c;支持 Seata 分布式事务。 支持 数据源分组 &#xff0c;适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 支持数据库敏感配置信息 加密…

卡尔曼滤波

文章目录References卡尔曼滤波的作用世界中充满着不确定性在工程中整体感受状态空间方程结合例子理解公式公式6-1说明公式6-2说明参数H的意义总结怎么融合&#xff1f;从简单的例子入手-测量一枚硬币的直径融合实例卡尔曼公式详细推导协方差矩阵卡尔曼增益的推导详细推导误差协…

基于规则的分类(顺序覆盖算法)及最近邻分类器(KNN算法)

顺序覆盖算法的步骤 顺序覆盖算法的目标是提取一个分类规则&#xff0c;该规则覆盖训练集中大量正例&#xff0c;没有或仅覆盖少量反例。 整个过程包含以下四个步骤&#xff1a; 规则增长规则评估停止准则规则剪枝 顺序覆盖算法的第一步——规则增长 一般到特殊&#xff08…