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

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

封装方法如下:

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))

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

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 21:18:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 21:18:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 21:18:02       58 阅读
  4. Python语言-面向对象

    2024-07-15 21:18:02       69 阅读

热门阅读

  1. 【LeetCode力扣】007. 整数反转(Python)

    2024-07-15 21:18:02       21 阅读
  2. Spark 和 Kafka 处理 API 请求与返回数据DEMO

    2024-07-15 21:18:02       18 阅读
  3. 【Kylin】Kylin入门

    2024-07-15 21:18:02       16 阅读
  4. 变态的python元组

    2024-07-15 21:18:02       20 阅读
  5. zookeeper+kafka群集

    2024-07-15 21:18:02       16 阅读
  6. 域名WHOIS查询多种方式

    2024-07-15 21:18:02       22 阅读
  7. 短链安全漏洞

    2024-07-15 21:18:02       23 阅读
  8. 08-8.3.1 冒泡排序

    2024-07-15 21:18:02       15 阅读
  9. docker 容器内部UI映射host

    2024-07-15 21:18:02       21 阅读
  10. 2024 7.8~7.14 周报

    2024-07-15 21:18:02       18 阅读