在Python中计算两个日期或时间的时间差天数,主要使用datetime
模块或第三方库dateutil
。以下是具体方法及示例:
一、使用datetime
模块(推荐)
-
基本方法
通过
datetime
模块的datetime
类或date
类,直接计算两个日期对象的天数差。from datetime import datetime, date def days_between_dates(date1, date2): date_format = "%Y-%m-%d" # 日期格式需统一 date1_obj = datetime.strptime(date1, date_format) date2_obj = datetime.strptime(date2, date_format) delta = date2_obj - date1_obj return abs(delta.days) # 返回绝对值 # 示例 date1 = "2023-10-01" date2 = "2023-10-15" print(f"相差 {days_between_dates(date1, date2)} 天") # 输出: 14
-
处理不同格式的日期
若日期为字符串且格式不统一,可自定义解析逻辑。例如:
def convert_string_to_date(date_str): if date_str.startswith("20"): year, month, day = date_str[0:4], date_str[4:6], date_str[6:8] else: year, month, day = date_str[0:2] + "20", date_str[2:4], date_str[4:6] return date(int(year), int(month), int(day)) start_date = convert_string_to_date("2023/10/1") end_date = date(2023, 10, 15) print((end_date - start_date).days) # 输出: 14
二、使用第三方库dateutil
当处理相对日期(如"1周前")或复杂格式时,dateutil
更灵活。1. 安装库
需先安装python-dateutil
:pip install python-dateutil
。
- 计算时间差
from dateutil.relativedelta import relativedelta def relative_days(date1, date2): delta = relativedelta(date2, date1) return delta.days # 返回天数差 # 示例 print(relative_days(date(2023, 10, 1), date(2023, 10, 15))) # 输出: 14
三、注意事项
-
异常处理 :解析日期时需捕获
ValueError
,避免程序崩溃。 -
时间类型 :若输入为
datetime
对象,可直接相减获取timedelta
对象,再通过days
属性获取天数差。
以上方法适用于大多数日期时间计算场景,可根据具体需求选择合适的方式。