Python常用日期时间处理方法示例

阿麦
阿麦
发布时间:2026-10-12 | 5人浏览过
原创

本文整理了Python中利用内置datetime模块进行日期时间处理的常见方法,涵盖前后推移天数、获取昨今日期、日期与字符串互转、按秒或天计算间隔以及生成连续日期列表等核心场景。通过封装标准函数并修正原始片段中的语法隐患,提供可直接复用的操作代码与输出验证,帮助开发者快速解决日常开发与数据清洗中的时间运算需求。

Python常用日期时间处理操作指南

在实际开发与数据脚本编写中,经常需要计算相对日期、解析时间字符串或统计两个时间节点之间的跨度。Python标准库内置的datetime模块结合timedelta对象,能够高效完成这些任务。以下按操作目标拆解关键步骤并提供完整可运行代码。

第1步:配置环境与引入依赖

目的:确保运行环境具备处理时间对象的基礎能力。
入口:Python标准库,无需第三方安装。
动作:在文件头部添加import datetime。该模块提供date(仅年月日)、time(仅时分秒)与datetime(组合型)三个核心类,配合timedelta即可满足绝大部分推算需求。

第2步:实现日期推算与基准时间获取

目的:支持按指定天数前后偏移,或即时获取今天、昨天的日期与当前精确时间。
动作:使用datetime.date.today()获取当日基准,结合datetime.timedelta(days=N)进行加减运算。针对需要毫秒精度的场景,使用datetime.datetime.now()。

#-*- coding: utf-8 -*-
import datetime

# 给定日期向后推移N天
def dateadd_day(days):
    d1 = datetime.datetime.now()
    d3 = d1 + datetime.timedelta(days=days)
    return d3

# 获取昨天日期
def getYesterday():
    today = datetime.date.today()
    oneday = datetime.timedelta(days=1)
    return today - oneday

# 获取今天日期
def getToday():
    return datetime.date.today()

# 获取当前精确时间
def getNow():
    return datetime.datetime.now()

第3步:执行格式转换与字段提取

目的:将文本格式的年月日时分秒解析为程序可计算的对象,或反向提取年/月/日/时/分/秒字符串。
注意:原草稿使用字符串切片提取年月日,在单数月份或日期时会丢失前导零。此处修正为使用.strftime()统一格式化,保证输出稳定。
动作:输入端使用strptime()严格匹配模板;输出端使用strftime()控制显示结构。

# 将字符串转换成datetime类型
def strtodatetime(datestr, fmt):
    return datetime.datetime.strptime(datestr, fmt)

# 时间对象转换为字符串,格式为 YYYY-MM-DD
def datetostr(date_obj):
    return date_obj.strftime('%Y-%m-%d')

# 时间对象转换为字符串,包含秒,格式为 YYYY-MM-DD HH:MM:SS
def datetostr_second(date_obj):
    return str(date_obj)[:19]

# 提取年/月/日/时/分/秒(均返回字符串)
def getYear(date_obj=None):
    return getToday().strftime('%Y') if date_obj is None else date_obj.strftime('%Y')
def getMonth(date_obj=None):
    return getToday().strftime('%m') if date_obj is None else date_obj.strftime('%m')
def getDay(date_obj=None):
    return getToday().strftime('%d') if date_obj is None else date_obj.strftime('%d')
def getHour(date_obj=None):
    return getNow().strftime('%H') if date_obj is None else date_obj.strftime('%H')
def getMinute(date_obj=None):
    return getNow().strftime('%M') if date_obj is None else date_obj.strftime('%M')
def getSecond(date_obj=None):
    return getNow().strftime('%S') if date_obj is None else date_obj.strftime('%S')

第4步:计算间隔差值与生成连续序列

目的:量化两个时间点的绝对差距(天/秒),并展开指定范围内的每日记录。
动作:两日期相减直接得到timedelta对象,调用属性换算跨度;循环累加单日timedelta即可完成区间遍历。
完成状态:差值函数返回整数天数或总秒数;序列函数返回列表格式的日期字符串。

# 获取给定参数的前几天的日期,返回列表
def getDaysBefore(num):
    li = []
    base = datetime.date.today()
    oneday = datetime.timedelta(days=1)
    for _ in range(num):
        base = base - oneday
        li.append(datetostr(base))
    return li

# 两个日期相隔多少天
def datediff(beginDate, endDate):
    fmt = "%Y-%m-%d"
    bd = strtodatetime(beginDate, fmt)
    ed = strtodatetime(endDate, fmt)
    # 直接利用timedelta相减获取天数更高效
    return (ed - bd).days

# 两个日期之间相差的秒数(兼容带时分秒或不带的情况)
def datediff_seconds(beginDate, endDate):
    fmt_full = "%Y-%m-%d %H:%M:%S"
    fmt_date = "%Y-%m-%d"
    
    bhas_time = " " in beginDate and ":" in beginDate
    ehas_time = " " in endDate and ":" in endDate
    
    bfmt = fmt_full if bhas_time else fmt_date
    efmt = fmt_full if ehas_time else fmt_date
    
    st = strtodatetime(beginDate, bfmt)
    et = strtodatetime(endDate, efmt)
    
    delta = et - st
    return delta.days * 86400 + delta.seconds

# 获取两个时间段的所有日期,返回list
def getDays(beginDate, endDate):
    fmt = "%Y-%m-%d"
    begin = strtodatetime(beginDate, fmt)
    end = strtodatetime(endDate, fmt)
    oneday = datetime.timedelta(days=1)
    
    total_days = datediff(beginDate, endDate) + 1
    li = []
    for i in range(total_days):
        li.append(datetostr(begin))
        begin = begin + oneday
    return li

运行上述代码后,调用各函数并打印返回值即可核对是否符合业务预期。例如datediff('2015-02-01', '2015-10-05')会返回246,getDays('2015-02-03', '2015-02-05')将输出['2015-02-03', '2015-02-04', '2015-02-05']。建议在实际项目中统一使用strftime规范输出,避免因系统区域设置差异导致解析失败。

以上就是Python常用日期时间处理方法的详细内容,更多关于Python时间运算与datetime模块的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表