python之如何计算两个日期相差天数days

参考:https://jingyan.baidu.com/article/3f16e003211db12591c103a6.html

 

自己封装的一个方法【计算两个日期的差值】

 @classmethod
    # 把一个字符串格式的日期【2019-7-18】或【2019.7.18】转换成(2019,7,8)数字元组
    def date_str_to_number_tuple(cls, date_str):
        if "-" in date_str:
            [year, month, day] = date_str.split("-")
        elif "." in date_str:
            [year, month, day] = date_str.split(".")
        else:
            raise Fail(f"date_str日期字符串格式必须为[年-月-日]或[年.月.日]")
        return [int(year), int(month), int(day)]

    @classmethod
    # 计算两个日期相差多少天days
    def compute_two_date_offset_days(cls, start_date_str, end_date_str):
        start_year_month_day = cls.date_str_to_number_tuple(start_date_str)
        end_year_month_day = cls.date_str_to_number_tuple(end_date_str)
        return (datetime.date(*end_year_month_day) - datetime.date(*start_year_month_day)).days

 

参考资料:官方的date源代码兼容增删改查运算【内部实现了这些特殊方法】

class date:
    min: ClassVar[date]
    max: ClassVar[date]
    resolution: ClassVar[timedelta]

    def __init__(self, year: int, month: int, day: int) -> None: ...

    @classmethod
    def fromtimestamp(cls, t: float) -> date: ...
    @classmethod
    def today(cls) -> date: ...
    @classmethod
    def fromordinal(cls, n: int) -> date: ...
    if sys.version_info >= (3, 7):
        @classmethod
        def fromisoformat(cls, date_string: str) -> date: ...

    @property
    def year(self) -> int: ...
    @property
    def month(self) -> int: ...
    @property
    def day(self) -> int: ...

    def ctime(self) -> str: ...
    def strftime(self, fmt: _Text) -> str: ...
    if sys.version_info >= (3,):
        def __format__(self, fmt: str) -> str: ...
    else:
        def __format__(self, fmt: AnyStr) -> AnyStr: ...
    def isoformat(self) -> str: ...
    def timetuple(self) -> struct_time: ...
    def toordinal(self) -> int: ...
    def replace(self, year: int = ..., month: int = ..., day: int = ...) -> date: ...
    def __le__(self, other: date) -> bool: ...
    def __lt__(self, other: date) -> bool: ...
    def __ge__(self, other: date) -> bool: ...
    def __gt__(self, other: date) -> bool: ...
    def __add__(self, other: timedelta) -> date: ...
    @overload
    def __sub__(self, other: timedelta) -> date: ...
    @overload
    def __sub__(self, other: date) -> timedelta: ...
    def __hash__(self) -> int: ...
    def weekday(self) -> int: ...
    def isoweekday(self) -> int: ...
    def isocalendar(self) -> Tuple[int, int, int]: ...

 

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值