如何用python写一个计算日期间隔的程序?

2023-05-16

如何用python写一个计算日期间隔的程序?

文章目录

  • 如何用python写一个计算日期间隔的程序?
    • 前言
    • 问题梳理
    • 问题解决
    • 写在后面

前言

为什么想起来写一个这样的程序呢?

前几天聊天的时候,突然想计算一下两个日期之间的间隔,于是去搜索类似功能的网站。

然后就在想这个问题会很困难嘛,我能不能也写一个小程序呢?

可能这里就有朋友要说了,明明有现成的模块能之间计算日期间隔,你为什么不用呢?

阿这我就是不太想用现成的模块,想自己写一个玩,就像有现成的网站我用完还是想自己写一个了解一下原理。

问题梳理

那么计算日期间隔我们会遇到哪些问题呢?

首先是一个很容易出错的问题:闰年

为什么说闰年这个问题容易出错呢?

因为很多朋友可能对闰年的概念也不是很了解,觉得能被4整除就是闰年。

但其实1900和2100年都不是闰年。

以下是百度百科中对闰年的解释

image-20220207115130799

然后我们用什么方式来计算间隔呢?

首先我们判断第一个日期是第一年的第a天,在判断第二个日期是第二年的第b天,再计算两年的第一天之间的间隔天数c,计算c+b-a,就是最终结果了。

问题解决

首先我们来写一个判断闰年的函数,闰年的英文为Leap Year,所以用函数LY(a)来表示,如果是闰年返回1,不是闰年返回0

def LY(a):
    if a>=1582:
        if a % 400 == 0:
            return 1
        elif a % 100 == 0:
            return 0
        elif a % 4 == 0:
            return 1
        else:
            return 0
    else:
        if a % 4 == 0:
            return 1
        else:
            return 0

那么核心问题解决了之后,就很简单了,一下是我的全部代码

print("Please enter initial Time(yyyymmdd)")
t0 = input()
print("Please enter a cut-off time(yyyymmdd)")
t1 = input()
y = [31,28,31,30,31,30,31,31,30,31,30,31]
ly = [31,29,31,30,31,30,31,31,30,31,30,31]
y0 = int(t0[0:4])
y1 = int(t1[0:4])
m0 = int(t0[4:6])
m1 = int(t1[4:6])
d0 = int(t0[6:8])
d1 = int(t1[6:8])
def LY(a):
    if a>=1582:
        if a % 400 == 0:
            return 1
        elif a % 100 == 0:
            return 0
        elif a % 4 == 0:
            return 1
        else:
            return 0
    else:
        if a % 4 == 0:
            return 1
        else:
            return 0
if LY(y0) == 0:
    sumy0 = 365
    sumd0 = sum(y[0:m0-1]) + d0
else:
    sumy0 = 366
    sumd0 = sum(ly[0:m0-1]) + d0
if LY(y1) == 0:
    sumy1 = 365
    sumd1 = sum(y[0:m1-1]) + d1
else:
    sumy1 = 366
    sumd1 = sum(ly[0:m1-1]) + d1
if y1-y0 == 0:
    ans = sumd1 - sumd0
else:
    l=0
    for i in range(y0,y1):
        if LY(i) == 0:
            l+=365
        else:
            l+=366
    ans = l + sumd1 -sumd0
print('The interval is {0} days'.format(ans))
input('Press Enter to exit')

运行一下,得到如下结果。

image-20220207122200346

然后我将文件打包为Calculate date interval.exe

上传到了github,可以点击这里来查看。

写在后面

本人只是一个python爱好者,没事写点自己的学习心得,如果有什么错误欢迎来批评指正。

就这样,谢谢大家的观看。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何用python写一个计算日期间隔的程序? 的相关文章

随机推荐

  • keil5,C文件下的h文件有感叹号

    1 有感叹号可能的原因是因为文件路径中包含汉字 xff0c 重新设置不包含汉字的路径 xff0c 在进行编译就没有感叹号了
  • keil5,定义了变量但还是报错。test.c(33): error: #268: declaration may not appear after executable statement in

    declaration may not appear after executable statement in block 1 点击魔术棒 xff0c 进入设置 2 点击c c 43 43 检查你的C99 Mode有没有打对勾 如果没有就
  • stm32——2.蜂鸣器

    beep h文件 span class token macro property span class token directive hash span span class token directive keyword ifndef
  • 设计模式详解:单例模式

    本篇来看一下创建型模式中最常用的第三种模式 xff1a 单例模式 仍然是先看两张图 xff0c 复习模式类型 xff0c 加深记忆 定义 xff1a 单例模式 xff1a 确保一个类 只有一个实例 xff0c 并提供一个 全局访问点 来访问
  • React 中的副作用函数 useEffect 使用说明

    React 中的函数式组件为了能够Hook相应的阶段 xff0c 采用 useEffect函数 xff0c 以实现类 xff08 class xff09 组件的componentDidMount xff0c componentDidUpda
  • stm32——3、键盘

    这里用到的是正点原子开发板 可以看到键盘通过PE2 PE3 PE4 PA0来连接 如果你的开发板不是这个需要改到对应的接口啊 另外可以看到WK UP是高电平有效的 xff0c 并且外部没有上下拉电阻 xff0c 需要stm32内部设置上下拉
  • stm32——4、中断exti

    这里是基于正点原子开发板的学习记录 首先你要加入固件库 stm32f10x exti h 和 stm32f10x exti c 1 STM32中每个io口都可以作为外部中断的中断输入口 2 STM32F103的中断控制器支持19个外部中断
  • Android Q 获取设备唯一ID(UDID\GUID\UUID\SSAID\GAID)

    Android Q获取设备唯一ID xff08 UDID GUID UUID SSAID GAID xff09 一 简介1 1 问题背景1 2 关键技术 二 解决方案2 1 谷歌官方推荐方案 4种 2 2 实现方案1 GUID方案2 3 实
  • @RunWith(SpringRunner.class)测试SpringRunner.class找不到报红的解决办法

    SpringRunner报红无法添加类 上pom xml文件中去掉scope标签内容即可 如下图所示 问题解决
  • 搭建Hadoop分布式集群的详细教程

    目录 写在前面 一 创建虚拟机 xff0c 安装Centos 二 VMware VMnet8模式共享主机网络配置 三 克隆集群节点HadoopSlave1与HadoopSlave2 四 Linux系统配置 五 Hadoop的部署配置 六 H
  • PTA基础编程题 7-26单词长度 (15 分)

    题目 xff1a 你的程序要读入一行文本 xff0c 其中以空格分隔为若干个单词 xff0c 以 结束 你要输出每个单词的长度 这里的单词与语言无关 xff0c 可以包括各种符号 xff0c 比如it 39 s算一个单词 xff0c 长度为
  • 单链表逆置(头插法图解)

    算法思想 xff1a 首先将头结点摘下 xff0c 重新构造链表 xff0c 然后原链表中的结点依次头插到新链表中 xff0c 如此循环 xff0c 直到链表为空 xff0c 即可逆置链表 代码 xff1a 链表逆置 include lt
  • Java-如何理解new A();

    在leetcode 541 反转字符串中有这样一种解法 xff1a public class reverse string public static String reverseStr String s int k char ch 61
  • C++中main函数如何调用类内函数

    C 43 43 中main函数调用类内函数的方法 以力扣209题为例 include lt iostream gt include lt vector gt using namespace std class minimum size su
  • 堆排序——手工模拟+程序实现

    堆排序的算法思想 xff1a 将待排序列构造成一个大顶堆 xff0c 此时 xff0c 整个序列的最大值就是堆顶元素 输出堆顶元素 xff0c 将堆顶元素与堆底最后一个元素进行交换 xff0c 然后 xff0c 将剩余n 1个元素重新构造成
  • 设计模式详解:原型模式

    本篇来看一下创建型模式中的第四种模式 xff1a 原型模式 仍然是先看两张图 xff0c 复习模式类型 xff0c 加深记忆 定义 xff1a 原型模式 xff1a 使用原型实例指定待创建对象的类型 xff0c 并且 通过复制这个原型来创建
  • maven镜像源及代理配置

    在公司使用网络一般需要设置代理 xff0c 我在idea中创建springboot工程时 xff0c 发现依赖下载不了 xff0c 原以为只要浏览器设置代理 xff0c 其他的网络访问都会走代理 xff0c 经过查资料设置了以下几个地方后工
  • IDEA SpotBugs代码安全审计插件

    IDEA SpotBugs代码安全审计插件 在寻找idea代码审计插件的时候 xff0c 发现Findbugs已经停止更新 xff0c 无法在idea2020 01版本运行 xff0c 由此找到SpotBugs SpotBugs介绍 Spo
  • 洛谷P1233 木棍加工

    题目描述 一堆木头棍子共有n根 xff0c 每根棍子的长度和宽度都是已知的 棍子可以被一台机器一个接一个地加工 机器处理一根棍子之前需要准备时间 准备时间是这样定义的 xff1a 第一根棍子的准备时间为1分钟 xff1b 如果刚处理完长度为
  • 如何用python写一个计算日期间隔的程序?

    如何用python写一个计算日期间隔的程序 xff1f 文章目录 如何用python写一个计算日期间隔的程序 xff1f 前言问题梳理问题解决写在后面 前言 为什么想起来写一个这样的程序呢 xff1f 前几天聊天的时候 xff0c 突然想计