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

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

封装方法如下:

from datetime import datetimedef 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 - date2return duration.secondsdef sub_minute(date1: str = "2024-07-11 12:33:33",date2: str = "2024-07-10 12:33:33",
) -> float:return sub_seconds(date1, date2) / 60def sub_hour(date1: str = "2024-07-11 12:33:33",date2: str = "2024-07-10 12:33:33",
) -> float:return sub_minute(date1, date2) / 60def 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 - date2return duration.total_seconds()

最终代码封装如下:

from datetime import datetime, timedeltadef 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 - date2def 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() / 60def 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() / 3600def 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.daysdef 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 / 30def 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 datetimeimport ztimeclass 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 - date2print(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.mzph.cn/diannao/44930.shtml

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

相关文章

【CORS 报错】跨域请求问题:CORS 多种环境下的解决方案

🔥 个人主页:空白诗 文章目录 一、CORS错误的常见原因二、解决方案1. Vue3 Vite项目下的解决方案创建Vue3 Vite项目配置Vite的代理发送请求 2. jQuery项目下的解决方案使用CORS请求头使用JSONP 3. 其他环境下的解决方案使用服务器端代理设置CORS头使用…

PS拉框选择工具

Photoshop(PS)中的拉框选择工具,也称为选框工具,是图像处理中非常基础且强大的工具之一。它允许用户通过绘制矩形、椭圆形以及单行、单列的选择框来选定图像中的特定区域。本教程将详细介绍选框工具的使用方法、技巧及其属性设置。…

嵌入式Qt开发C++核心编程知识万字总结

C核心编程 文章目录 C核心编程1、程序的内存模型2、函数高级1.函数的默认参数2.函数的占位参数3.函数重载1.基本语法2.注意事项 3、类和对象1.类1.类的组成2.类的访问权限3.class和struct的区别 2.构造函数(Constructor)1.示例2.特点 3.析构函数&#xf…

前端vue3 登录页面 响应式开发

一个登录页面 我直接上代码了 结构是这样的 Login 页面 <template><a-layout class"login-box"><a-layout-content class"login-content"><a-row align"middle" justify"center" class"login-content-ma…

蝙蝠避障:为盲人出行插上科技的翅膀

在这个五彩斑斓的世界里&#xff0c;每一步都充满了探索与惊喜。但对于我这样的视障者来说&#xff0c;每一次出行都是一场未知的冒险。我时常面临着难以想象的挑战&#xff1a;如何安全地穿越繁忙的街道&#xff0c;怎样准确地识别前方的障碍物&#xff0c;乃至简单地找到回家…

viewmodel创建及使用分析

1、相关的类 ViewModelStore &#xff1a;管理viewModel实例&#xff0c;内部包含一个Map用来存储viewmodel&#xff0c;内部包括put、get、clear等方法ViewModelProvider &#xff1a;管理ViewModelStore和Factory&#xff0c;Factory里面有create方法是创建对应的viewmodel的…

Facebook的未来蓝图:从元宇宙到虚拟现实的跨越

随着科技的不断演进和社会的数字化转型&#xff0c;虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;作为下一代计算平台正逐渐走进人们的视野。作为全球领先的科技公司之一&#xff0c;Facebook正在积极探索并推动这一领域的发展&#xff0c;以实现其…

嫌云服务器太贵,使用内网穿透代替

企业与个人开发者常常面临一个现实问题&#xff1a;高昂的云服务器成本。随着业务需求的增长&#xff0c;持续的服务器租赁费用可能成为负担。然而&#xff0c;在这个充满创新的时代&#xff0c;一种名为“内网穿透”的技术正逐渐成为解决这一难题的优选方案。本文将探讨内网穿…

深度学习基础与实战:Python实现

深度学习基础与实战&#xff1a;Python实现 深度学习是机器学习的一个重要分支&#xff0c;通过多层神经网络实现对数据的自动特征提取和建模。本文将介绍深度学习的基础概念、常用框架以及一个完整的实战项目&#xff0c;帮助读者从基础入门到实际应用。 目录 深度学习概述…

CF 1986D. Mathematical Problem

原题链接&#xff1a;Problem - 1986D - Codeforces 题意&#xff1a;一串长度最多为20的由数字组成的字符串&#xff0c;在这些数字中间可以添加字符串长度减去二数量的符号&#xff0c;加或者乘&#xff0c;例如1234&#xff0c;就可以添加加号或者乘号二个&#xff0c;变成…

vue中el-table前端导出excel数据表格

一、el-table为正常时&#xff0c;导出方法如下&#xff1a; 1.添加导出按钮 <el-button class"greenLinearbg dc" size"small" click"webExportTotalExcel()" v-if"totalBillShow">导出</el-button>2.导出方法 // we…

Spring开发实践(二)

EnableAsync 和 Async 注解的使用方法 EnableAsync 和 Async 是Spring框架中的两个注解&#xff0c;用于启用和使用异步方法执行。它们可以帮助你在Spring应用程序中实现异步编程&#xff0c;从而提高应用程序的性能和响应速度。 EnableAsync EnableAsync 注解用于启用Sprin…

ARM Ubuntu 主机安装指定版本Python

要在你的ARM Linux主机上安装Python 3.12&#xff0c;你可以从源码编译安装。以下是具体步骤&#xff1a; 步骤1&#xff1a;安装依赖 首先&#xff0c;确保你有必要的编译工具和依赖包&#xff1a; sudo apt-get update sudo apt-get install -y build-essential libssl-d…

【每日一练】python的类.对象.成员.行为.方法传参综合实例(保姆式教学)

运行结果: 本节课程内容&#xff1a;类的使用 1.掌握类的定义和使用方法 2.掌握类的成员的方法使用 3.掌握self关键字的作用 4.定义在类里的函数是类的一种行为&#xff0c;叫方法 5.带传参的行为使用方法 类基本分两部分组成&#xff1a;1.属性,2.方法 类的使用语法&#xf…

springCloud整合Dubbo案例

前言&#xff1a; 好久没有使用dubbo了&#xff0c;温习一下。 一、先搭建一个SpringCloud框架 整体框架如下图 1. 先创建一个父工程&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4…

开发者必读:获取电商API的多种渠道

开发电商软件往往需要对接电商API&#xff0c;电商API可以从哪些渠道获取&#xff1f;下面给大家介绍两种获取渠道。 一、从电商平台开放平台获取电商API 电商平台的开放平台是获取电商API最直接的渠道&#xff0c;但是电商平台较多&#xff0c;每一个电商平台都需要单…

Vue3 引入腾讯地图 包含标注简易操作

1. 引入腾讯地图API JavaScript API | 腾讯位置服务 (qq.com) 首先在官网注册账号 并正确获取并配置key后 找到合适的引入方式 本文不涉及版本操作和附加库 据体引入参数参考如下图 具体以链接中官方参数为准标题 在项目根目录 index.html 中 写入如下代码 <!-- 引入腾…

Socks5代理为什么比HTTP代理快?

在数字化日益深入的时代&#xff0c;网络安全和隐私保护成为了公众关注的焦点。为了应对网络威胁&#xff0c;保护个人隐私和数据安全&#xff0c;代理技术应运而生。在众多代理协议中&#xff0c;SOCKS5代理和HTTP代理是两种较为常见的选择。然而&#xff0c;为何SOCKS5代理在…

网页设计零基础入门:前端技术全攻略

在当今互联网飞速发展的时代&#xff0c;前端网页设计已经成为一个备受关注的领域。随着其重要性的不断提高&#xff0c;越来越多的专业人士和爱好者开始对前端设计感兴趣&#xff0c;希望通过掌握这项技术开辟自己的职业道路。然而&#xff0c;对于新手设计师来说&#xff0c;…

ollama + lobechat 搭建自己的多模型助手

背景 人工智能已经推出了快2年了&#xff0c;各种模型和插件&#xff0c;有渐渐变成熟的趋势&#xff0c;打造一个类似 hao123网站的人工智能模型入口&#xff0c;也变得有需求了。用户会去比较多个ai给出的答案&#xff0c;作为程序员想拥有一台自己的GPU服务器来为自己服务。…