python如何计算两个时间相差多少秒钟,分钟,小时,天,月,年

news2025/3/3 18:41:11

使用场景:在做上课记录系统的时候,有上课开始时间和上课结束时间,需要计算这两个时间的插值,以分钟为单位。

封装方法如下:

from datetime import datetime


def sub_seconds(
        date1: str = "2024-07-11 12:33:33",
        date2: str = "2024-07-10 12:33:33",
) -> float:
    date1 = datetime.strptime(date1, "%Y-%m-%d %H:%M:%S")
    date2 = datetime.strptime(date2, "%Y-%m-%d %H:%M:%S")
    duration = date1 - date2
    return duration.seconds


def sub_minute(
        date1: str = "2024-07-11 12:33:33",
        date2: str = "2024-07-10 12:33:33",
) -> float:
    return sub_seconds(date1, date2) / 60


def sub_hour(
        date1: str = "2024-07-11 12:33:33",
        date2: str = "2024-07-10 12:33:33",
) -> float:
    return sub_minute(date1, date2) / 60


def sub_day(
        date1: str = "2024-07-11 12:33:33",
        date2: str = "2024-07-10 12:33:33",
) -> float:
    return sub_hour(date1, date2) / 60

经过实测,不能使用duration.seconds,而是要改成duration.total_seconds()

def sub_seconds(
        date1: str = "2024-07-11 12:33:33",
        date2: str = "2024-07-10 12:33:33",
) -> float:
    date1 = datetime.strptime(date1, "%Y-%m-%d %H:%M:%S")
    date2 = datetime.strptime(date2, "%Y-%m-%d %H:%M:%S")
    duration = date1 - date2
    return duration.total_seconds()

最终代码封装如下:

from datetime import datetime, timedelta


def sub_duration(
        date1: str = "2024-07-11 12:33:33",
        date2: str = "2024-07-10 12:33:33",
) -> timedelta:
    date1 = datetime.strptime(date1, "%Y-%m-%d %H:%M:%S")
    date2 = datetime.strptime(date2, "%Y-%m-%d %H:%M:%S")
    return date1 - date2


def sub_seconds(
        date1: str = "2024-07-11 12:33:33",
        date2: str = "2024-07-10 12:33:33",
) -> float:
    duration = sub_duration(date1, date2)
    return duration.total_seconds()


def sub_minutes(
        date1: str = "2024-07-11 12:33:33",
        date2: str = "2024-07-10 12:33:33",
) -> float:
    duration = sub_duration(date1, date2)
    return duration.total_seconds() / 60


def sub_hours(
        date1: str = "2024-07-11 12:33:33",
        date2: str = "2024-07-10 12:33:33",
) -> float:
    duration = sub_duration(date1, date2)
    return duration.total_seconds() / 3600


def sub_days(
        date1: str = "2024-07-11 12:33:33",
        date2: str = "2024-07-10 12:33:33",
) -> float:
    duration = sub_duration(date1, date2)
    return duration.days


def sub_months(
        date1: str = "2024-07-11 12:33:33",
        date2: str = "2024-07-10 12:33:33",
) -> float:
    duration = sub_duration(date1, date2)
    return duration.days / 30


def sub_years(
        date1: str = "2024-07-11 12:33:33",
        date2: str = "2024-07-10 12:33:33",
) -> float:
    duration = sub_duration(date1, date2)
    return duration.days / 365

测试代码如下:

import unittest
from datetime import datetime

import ztime


class TestCalcSub(unittest.TestCase):
    def test_basic(self):
        date1 = "2024-07-11 01:03:04"
        date2 = "2021-01-01 02:01:01"
        date1 = datetime.strptime(date1, "%Y-%m-%d %H:%M:%S")
        date2 = datetime.strptime(date2, "%Y-%m-%d %H:%M:%S")
        d = date1 - date2
        print(d.total_seconds() / (24 * 60 * 60 * 365))

    def test_sub_seconds(self):
        date1 = "2024-07-11 01:03:04"
        date2 = "2021-01-01 02:01:01"
        print(ztime.calc.sub_seconds(date1, date2))
        print(ztime.calc.sub_minutes(date1, date2))
        print(ztime.calc.sub_hours(date1, date2))
        print(ztime.calc.sub_days(date1, date2))
        print(ztime.calc.sub_months(date1, date2))
        print(ztime.calc.sub_years(date1, date2))

测试结果如下:
在这里插入图片描述

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

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

相关文章

编程范式之事件驱动编程

目录 前言1. 定义2. 特点2.1 异步性2.2 解耦2.3 可扩展性2.4 高度响应 3. 适用场景3.1 用户界面开发3.2 网络编程3.3 游戏开发3.4 物联网(IoT) 4. 优点4.1 提高效率4.2 灵活性和可扩展性4.3 解耦和模块化4.4 高响应性 5. 缺点5.1 复杂性增加5.2 调试困难…

Spring中如何操作Redis

Spring毕竟是Java中的一个主流框架,如何在这个框架中使用Redis呢? 创建项目并引入相关依赖 然后进行创建。 至此就将Redis的相关依赖引入进来了。 编写Redis配置 将application.properties修改成application.yml 然后编写如下配置: spr…

昇思学习打卡-16-热门LLM及其他AI应用/K近邻算法实现红酒聚类

文章目录 算法原理距离定义模型构建 算法原理 K近邻算法可以用在分类问题和回归问题上,它的原理如下:要确定一个样本的类别,可以计算它与所有训练样本的距离,然后找出和该样本最接近的k个样本,统计出这些样本的类别并…

青否数字人手机端APP抖音开播完整教程!

1.开播--所需硬件 安卓手机设备--支持 直播手机推荐型号:配备了麒麟980,骁龙865,天玑1000以上的处理器的安卓手机,运营内存不低于6G 网络宽带:上下行宽带稳定在10Mbps以上(普通家用1000M宽带的上行速度大约为30Mbps,最…

二分查找模板及例题

文章目录 模板一:使用场景:解释:例题:数的范围题意: 代码: 模板二:使用场景:解释:例题:[Building an Aquarium](https://codeforces.com/problemset/problem/…

Tita的OKR:最新20个HR人力资源OKR案例

OKR是一个目标设定框架,可以提高员工的参与度,同时帮助人们专注于最重要的事情。 然而,OKR最大的挑战之一是设定正确的目标,我与很多人力资源专业人士交谈过,他们证明他们的OKR并不完美。 这就是为什么我们收集了最佳…

【2024_CUMCM】机器学习导论、不平衡分类模型(重采样)、交叉验证(附代码)

目录 基本概念 机器学习概念与过程 机器学习的分类 学习任务 分类与回归区分 学习方式 不平衡分类模型 什么是不平衡分类 下采样的优点和缺点 过采样的优点和缺点 交叉验证 what 过拟合 常见方法 K折交叉验证(K-Fold Cross Validation) …

后VMware时代,一体化技术平台建设思路

在数字化转型的浪潮中,企业对IT基础设施的需求正在发生根本性的变化。VMware时代的结束,为企业带来了重新构建技术平台的机遇与挑战。6月28日,在主题为【聚力生态,VMware全链替代】的线上研讨会上,灵雀云首席解决方案专…

适合运动的骨传导耳机有哪些?总结五款适合运动的骨传导耳机推荐

在追求健康生活的浪潮中,运动健身蔚然成风,而运动时的音乐陪伴更是不可或缺。然而,传统耳机在运动场景下的种种不便,促使市场寻找更佳解决方案。此时,骨传导耳机应运而生,以其独特的传音方式,为…

ESP32-WROVER-E/ESP32-WROVER-IE模组硬件相关

ESP32-WROVER-E和ESP32-WROVER-IE区别 带I的为采用外部天线,不带I的使用PCB天线。 模组后缀N16R8,16为4、8、16为FLASH存储器容量,8为8或2,为PSRAM的容量,单位均为MB。 模组芯片 ESP32-WROVER-E 和 ESP32-WROVER-IE…

tkinter-TinUI-xml实战(11)多功能TinUIxml编辑器

引言 在TinUIXml简易编辑器中,我们通过TinUI搭建了一个简易的针对TinUIXml布局的编辑器,基本掌握了TinUIXml布局和TinUIXml的导入与导出。现在,就在此基础上,对编辑器进行升级。 本次升级的功能: 更合理的xml编辑与…

【洞见】智算操作系统,推进算力迈入普惠智算新时代

WAIC 2024世界人工智能大会暨人工智能全球治理高级别会议正式拉开帷幕,面向世界徐徐展示人工智能技术最前沿的理念和成果。九章云极DataCanvas公司董事长方磊受邀参加大会开幕式,并在“迈向AGI:大模型焕新与产业赋能”论坛发表主题演讲&#…

docker 上传镜像到hub仓库

要将 Docker 镜像上传到 Docker Hub,你需要按照以下步骤操作: 登录 Docker Hub 首先,你需要登录到 Docker Hub。打开终端并运行以下命令:docker login系统会提示你输入 Docker Hub 的用户名和密码。 如果密码忘记可以token登录&a…

函数式接口、匿名内部类、lambda表达式

一、函数式接口 只有一个抽象方法的接口叫函数式接口,不能有两个,也不能有方法实现。 FunctionalInterface注解标记,在idea中可以用这个注解验证是不是函数式接口。实现函数式接口可以转成lambda表达式。 二、匿名内部类 匿名内部类的格式&a…

[k8s源码]1.client-go集群外部署

client-go是由k8s发布且维护的专门用于开发者和kubernetes交互的客户端库。它支持对k8s资源的CRUD操作(create、read、update、delete),事件监听和处理,访问kubernetes集群的上下文和配置。 client go是独立于kubernetes集群之外…

爬虫如此简单?一文教会网络爬虫!

在今天的网络环境中,数据的获取对于许多电商和信息分析人员来说至关重要。但是频繁的数据采集行为可能会导致目标网站对你的IP进行封锁或限制访问频率。这时候,使用代理IP可以是一个有效的解决方案。本文将向你介绍如何使用代理IP进行网络爬虫&#xff0…

《计算机研究与发展》投稿经验

前言 记录下投计研展正刊的经验。跟专刊不同哈,专刊会更快,我看好像也有专刊的经验分享。【计算机研究与发展投稿记录】 期刊简介 来源计研展官网: 《计算机研究与发展》是中国科学院计算技术研究所和中国计算机学会联合主办的学术性期刊&a…

sqlmap确定目标/实操

安装kali,kali自带sqlmap,在window系统中跟linux系统操作有区别 sqlmap是一款自动化SQL工具,打开kali终端,输入sqlmap,出现以下界面,就说明sqlmap可用。 sqlmap确定目标 一、sqlmap直连数据库 1、直连数据库…

电机控制杂谈——基于偏置电压注入的载波PWM策略/简化版SVPWM

1.前言 SVPWM策略需要非常繁琐的计算过程(扇区判断、电压矢量作用时间计算、各相开关切换顺序排布、各相开关切换时间计算,同时SVPWM还存在大量的查表法)。这在一定程度上限制了控制频率的提高(因为SVPWM计算复杂,会占…

centos 安装ffmpeg

这个错误表明在你的 CentOS 系统的默认仓库中没有 ffmpeg 包。CentOS 的默认仓库通常不包含 ffmpeg,因为它涉及一些许可证问题。但是,你可以通过添加第三方仓库来安装 ffmpeg。 使用 EPEL 和 RPM Fusion 仓库 # 安装 EPEL 仓库 sudo yum install epel-…