Python入门:Python3 datetime模块全面学习教程
Python入门Python3 datetime模块全面学习教程Python入门Python3 datetime模块全面学习教程这篇 Python datetime 模块学习教程系统介绍了该标准库在日期时间处理中的核心用法。首先明确其 5 个核心类date、time、datetime、timedelta、tzinfo的功能与示例再通过实战代码拆解高频需求获取当前日期时间、创建自定义时间、用 strftime/strptime 实现格式转换、借助 timedelta 计算时间差如未来时间、日期间隔还提供时区处理方案pytz 库兼容多 Python 版本zoneinfo 为 3.9 内置最后强调对象不可变、时区标识、性能优化及边界日期检查等注意事项帮助读者快速掌握核心能力应对日志记录、耗时统计等实际开发场景适合从入门到实战的学习需求。前言Python作为一门简洁、易读、功能强大的编程语言其基础语法是入门学习的核心。掌握好基础语法能为后续的编程实践打下坚实的基础。本文将全面讲解Python3的基础语法知识适合编程初学者系统学习。Python以其简洁优雅的语法和强大的通用性成为当今最受欢迎的编程语言。本专栏旨在系统性地带你从零基础入门到精通Python核心。无论你是零基础小白还是希望进阶的专业开发者都将通过清晰的讲解、丰富的实例和实战项目逐步掌握语法基础、核心数据结构、函数与模块、面向对象编程、文件处理、主流库应用如数据分析、Web开发、自动化以及面向对象高级特性最终具备独立开发能力和解决复杂问题的思维高效应对数据分析、人工智能、Web应用、自动化脚本等广泛领域的实际需求。 点击进入Python入门专栏Python凭借简洁易读的语法是零基础学习编程的理想选择。本专栏专为初学者设计系统讲解Python核心基础变量、数据类型、流程控制、函数、文件操作及常用库入门。通过清晰示例与实用小项目助你快速掌握编程思维打下坚实根基迈出自动化办公、数据分析或Web开发的第一步。 点击进入Python小游戏实战专栏 寓教于乐用Python亲手打造经典小游戏本专栏通过开发贪吃蛇、飞机大战、猜数字、简易版俄罗斯方块等趣味项目在实践中掌握Python核心语法、面向对象编程、事件处理、图形界面如Pygame等关键技能将枯燥的代码学习转化为可见的成果让学习编程充满乐趣与成就感快速提升实战能力。 点击进入Python小工具实战专栏告别重复劳动用Python打造效率神器本专栏教你开发文件批量处理、自动邮件通知、简易爬虫、桌面提醒、密码生成器、天气查询等实用小工具。聚焦os、shutil、requests、smtplib、schedule等核心库通过真实场景案例快速掌握自动化脚本编写技巧解放双手显著提升工作与生活效率让代码真正服务于你的日常。 点击进入Python爬虫实战专栏解锁网络数据宝库本专栏手把手教你使用Python核心库如requests、BeautifulSoup、Scrapy构建高效爬虫。从基础网页解析到动态页面抓取、数据存储CSV/数据库、反爬策略应对及IP代理使用通过实战项目如电商比价、新闻聚合、图片采集、舆情监控掌握合法合规获取并利用网络数据的核心技能让数据成为你的超能力。 点击进入Python项目实战专栏告别碎片化学习挑战真实项目本专栏精选Web应用开发Flask/Django、数据分析可视化、自动化办公系统、简易爬虫框架、API接口开发等综合项目。通过需求分析、架构设计、编码实现、测试部署的全流程深入掌握工程化开发、代码复用、调试排错与团队协作核心能力积累高质量作品集真正具备解决复杂问题的Python实战经验。 前篇文章咱们练习了 Python3 logging模块全面学习教程 如果忘记了可以去重温一下不停的重复敲击基础代码有助于让你更加熟练掌握一门语言。今天咱们继续学习 Python3 datetime模块全面学习教程下面开始吧在Python开发中处理日期和时间是非常常见的需求——比如记录日志时间、计算任务耗时、生成定时任务等。而datetime模块作为Python标准库中处理日期时间的核心工具提供了简洁、高效的类和方法能轻松应对各类时间操作场景。本文将从基础到实战带你全面掌握datetime模块的用法每个知识点都搭配可直接运行的代码示例新手也能快速上手一、先搞懂datetime模块的核心类datetime模块的功能围绕5个核心类展开每个类各司其职覆盖“日期”“时间”“时间差”“时区”等场景。先通过表格快速了解它们的定位核心类作用说明典型示例datetime.date仅表示日期年、月、日date(2024, 5, 20)→ 2024年5月20日datetime.time仅表示时间时、分、秒、微秒time(16, 30, 0)→ 16时30分0秒datetime.datetime同时表示日期时间date和time的结合datetime(2024,5,20,16,30)datetime.timedelta表示时间差用于时间加减计算timedelta(days3)→ 3天datetime.tzinfo时区信息基类需子类化实现一般用第三方库自定义时区类实际用pytz更方便二、实战操作常用功能代码示例掌握核心类后我们从“获取时间”“创建时间”“格式化”“时间计算”等高频场景入手逐个拆解实战用法。2.1 基础获取当前日期/时间最常用的需求之一——获取当前系统的日期或日期时间直接用date.today()或datetime.now()即可。示例1获取当前日期仅日期fromdatetimeimportdate# 获取当前本地日期年、月、日current_datedate.today()print(当前日期:,current_date)# 输出示例当前日期: 2024-05-20print(年份:,current_date.year)# 输出年份: 2024print(月份:,current_date.month)# 输出月份: 5print(星期几0周一6周日:,current_date.weekday())# 输出示例星期几0周一6周日: 0运行效果示例2获取当前日期时间日期时间fromdatetimeimportdatetime# 获取当前本地日期时间含微秒current_datetimedatetime.now()print(当前完整时间:,current_datetime)# 输出示例当前完整时间: 2025-09-16 11:54:27.622211# 提取日期部分print(仅日期:,current_datetime.date())# 输出仅日期: 2025-09-16# 提取时间部分print(仅时间:,current_datetime.time())# 输出仅时间: 11:54:27.6222112.2 进阶创建自定义的日期/时间如果需要指定某个具体的日期或时间比如“2024年10月1日 00:00:00”直接用核心类的构造函数即可。示例1创建指定日期fromdatetimeimportdate# 构造函数参数年、月、日必须传且需合法比如2月没有30日custom_datedate(2024,10,1)print(指定日期:,custom_date)# 输出指定日期: 2024-10-01示例2创建指定日期时间fromdatetimeimportdatetime# 构造函数参数年、月、日、时、分、秒微秒可选custom_datetimedatetime(2024,10,1,0,0,0)print(指定日期时间:,custom_datetime)# 输出指定日期时间: 2024-10-01 00:00:00⚠️ 注意如果传入非法日期比如date(2024,2,30)会直接触发ValueError因为2月没有30日。2.3 关键格式化日期时间转字符串datetime对象默认的输出格式如2024-05-20 16:35:42不一定满足需求此时用strftime()方法自定义格式核心是掌握常用的“格式化符号”。第一步记住常用格式化符号先收藏这个表格需要时直接查符号说明示例输出%Y四位年份2024%m两位月份01-1205%d两位日期01-3120%H24小时制小时00-2316%M两位分钟00-5935%S两位秒数00-5942%A完整星期名Monday%a缩写星期名Mon%B完整月份名May%b缩写月份名May第二步实战格式化fromdatetimeimportdatetime currentdatetime.now()# 格式1年-月-日 时:分:秒最常用format1current.strftime(%Y-%m-%d %H:%M:%S)print(格式1:,format1)# 输出示例格式1: 2024-05-20 16:40:15# 格式2月/日/年 星期 小时:分钟美式风格format2current.strftime(%m/%d/%Y %a %H:%M)print(格式2:,format2)# 输出示例格式2: 05/20/2024 Mon 16:40# 格式3中文风格直接拼接中文format3current.strftime(%Y年%m月%d日 %H时%M分)print(格式3:,format3)# 输出示例格式3: 2024年05月20日 16时40分2.4 核心时间差计算timedelta的用法timedelta是处理“时间加减”的核心类支持天数、小时、分钟、秒等单位的计算常用于“计算未来时间”“统计两个时间间隔”。示例1计算未来/过去的时间fromdatetimeimportdatetime,timedelta nowdatetime.now()# 1. 计算3天后的同一时间future_3dnowtimedelta(days3)print(3天后:,future_3d.strftime(%Y-%m-%d %H:%M))# 输出示例3天后: 2024-05-23 16:45# 2. 计算1小时30分钟前的时间past_1h30mnow-timedelta(hours1,minutes30)print(1小时30分钟前:,past_1h30m.strftime(%Y-%m-%d %H:%M))# 输出示例1小时30分钟前: 2024-05-20 15:15# 3. 支持小数比如0.5天12小时future_12hnowtimedelta(days0.5)print(12小时后:,future_12h.strftime(%Y-%m-%d %H:%M))# 输出示例12小时后: 2024-05-21 04:45示例2计算两个日期的天数差fromdatetimeimportdate# 日期12024年5月20日date1date(2024,5,20)# 日期22024年6月1日比如项目截止日期date2date(2024,6,1)# 两个date对象相减直接得到timedelta对象deltadate2-date1print(两个日期相差天数:,delta.days)# 输出两个日期相差天数: 12示例3计算两个时间的总秒数差fromdatetimeimportdatetime time1datetime(2024,5,20,10,0,0)time2datetime(2024,5,20,10,30,15)deltatime2-time1# 总秒数 天数*86400 秒数timedelta.seconds仅含0-86399的秒数total_secondsdelta.days*86400delta.secondsprint(两个时间相差秒数:,total_seconds)# 输出两个时间相差秒数: 181530分15秒2.5 实用字符串转日期时间strptime有时我们会从日志、用户输入中拿到字符串格式的时间比如2024-05-20 16:30需要转成datetime对象才能进行计算此时用datetime.strptime()方法。示例字符串转datetimefromdatetimeimportdatetime# 字符串格式的时间time_str2024-05-20 16:30:00# 用strptime解析第一个参数是字符串第二个参数是“字符串的格式”datetime_objdatetime.strptime(time_str,%Y-%m-%d %H:%M:%S)print(解析后的对象:,datetime_obj)# 输出解析后的对象: 2024-05-20 16:30:00print(解析后提取年份:,datetime_obj.year)# 输出解析后提取年份: 2024# 再试试其他格式的字符串time_str22024/05/20 下午04:30datetime_obj2datetime.strptime(time_str2,%Y/%m/%d 下午%I:%M)# %I是12小时制小时print(解析后的对象2:,datetime_obj2)# 输出解析后的对象2: 2024-05-20 16:30:00⚠️ 注意strptime的格式字符串必须和输入字符串完全匹配否则会报错。比如字符串是2024-05-20格式就不能写%Y/%m/%d横杠和斜杠不匹配。三、进阶场景处理时区datetime模块原生不支持时区操作默认是“本地时间”没有时区标识如果需要处理跨时区场景比如服务器在UTC时区本地在上海时区推荐用两个工具pytz库第三方库支持全球所有时区兼容性好zoneinfoPython 3.9 内置库无需安装轻量易用。3.1 用pytz处理时区兼容所有Python版本第一步安装pytzpipinstallpytz示例1获取指定时区的当前时间以上海为例fromdatetimeimportdatetimeimportpytz# 1. 获取上海时区对象时区名格式Continent/Cityshanghai_tzpytz.timezone(Asia/Shanghai)# 2. 获取上海时区的当前时间shanghai_timedatetime.now(shanghai_tz)print(上海当前时间含时区:,shanghai_time)# 输出示例2024-05-20 16:55:30.12345608:00示例2UTC时间转上海时间fromdatetimeimportdatetimeimportpytz# 1. 获取UTC时间并添加时区标识utc_tzpytz.timezone(UTC)utc_timedatetime.now(utc_tz)print(UTC时间:,utc_time)# 输出示例UTC时间: 2024-05-20 08:55:30.12345600:00# 2. 转换为上海时区shanghai_timeutc_time.astimezone(pytz.timezone(Asia/Shanghai))print(上海时间:,shanghai_time)# 输出示例上海时间: 2024-05-20 16:55:30.12345608:003.2 用zoneinfo处理时区Python 3.9 内置如果你的Python版本是3.9及以上无需安装第三方库直接用zoneinfofromdatetimeimportdatetimefromzoneinfoimportZoneInfo# Python 3.9 内置# 获取上海时区的当前时间shanghai_timedatetime.now(ZoneInfo(Asia/Shanghai))print(上海当前时间:,shanghai_time)# 输出示例2024-05-20 16:58:10.12345608:00# UTC时间转纽约时间utc_timedatetime.now(ZoneInfo(UTC))new_york_timeutc_time.astimezone(ZoneInfo(America/New_York))print(纽约时间:,new_york_time)# 输出示例纽约时间: 2024-05-20 04:58:10.123456-04:00四、避坑指南4个重要注意事项datetime对象不可变所有date/datetime/time对象都是不可变的对它们进行加减操作后必须赋值给新变量原对象不会改变。示例fromdatetimeimportdatetime,timedelta nowdatetime.now()futurenowtimedelta(days1)print(nowfuture)# 输出Falsenow还是原来的时间future是新时间时区标识很重要未指定时区的datetime对象如datetime.now()属于“ naive datetime”无法直接和带时区的datetime对象比较或计算会报错。建议处理跨时区场景时始终给datetime对象添加时区标识。性能问题如果需要频繁创建datetime对象比如每秒创建 thousands 个可能会影响性能建议重用已创建的对象如果逻辑允许用time模块的time()方法返回时间戳性能更高再按需转datetime。边界日期检查构造date/datetime对象时传入的年、月、日必须合法比如1月有31天2月平年28天、闰年29天否则会触发ValueError。如果需要处理“模糊日期”可以先通过字符串解析strptime或手动校验。五、总结datetime模块是Python处理日期时间的“瑞士军刀”核心掌握以下几点即可应对90%以上的场景用date/datetime获取/创建日期时间用strftime/strptime实现“对象转字符串”“字符串转对象”用timedelta进行时间加减和间隔计算用pytz/zoneinfo处理时区问题。建议大家结合实际需求多练习——比如统计“用户从注册到现在的天数”“计算程序运行耗时”“生成近7天的日期列表”通过实战才能真正熟练掌握。如果遇到问题随时回头查阅本文的示例和表格效率会更高如果觉得本文有用欢迎点赞收藏也可以在评论区分享你的datetime使用场景下一篇咱们学习 Python入门Python3 re模块全面学习教程附录扩展学习资源官方资源Python官网https://www.python.orgPyPIhttps://pypi.org查找第三方库安装包等相关文件另附带pycharm工具网盘下载地址https://pan.quark.cn/s/649af731037c学习资料视频和文档资源网盘下载地址 https://pan.quark.cn/s/ee16901a8954联系博主xcLeigh 博主全栈领域优质创作者博客专家目前活跃在CSDN、微信公众号、小红书、知乎、掘金、快手、思否、微博、51CTO、B站、腾讯云开发者社区、阿里云开发者社区等平台全网拥有几十万的粉丝全网统一IP为xcLeigh。希望通过我的分享让大家能在喜悦的情况下收获到有用的知识。主要分享编程、开发工具、算法、技术学习心得等内容。很多读者评价他的文章简洁易懂尤其对于一些复杂的技术话题他能通过通俗的语言来解释帮助初学者更好地理解。博客通常也会涉及一些实践经验项目分享以及解决实际开发中遇到的问题。如果你是开发领域的初学者或者在学习一些新的编程语言或框架关注他的文章对你有很大帮助。亲爱的朋友无论前路如何漫长与崎岖都请怀揣梦想的火种因为在生活的广袤星空中总有一颗属于你的璀璨星辰在熠熠生辉静候你抵达。愿你在这纷繁世间能时常收获微小而确定的幸福如春日微风轻拂面庞所有的疲惫与烦恼都能被温柔以待内心永远充盈着安宁与慰藉。至此文章已至尾声而您的故事仍在续写不知您对文中所叙有何独特见解期待您在心中与我对话开启思想的新交流。 关注博主 带你实现畅游前后端 大屏可视化 带你体验酷炫大屏 神秘个人简介 带你体验不一样得介绍 从零到一学习Python 带你玩转Python技术流 前沿应用深度测评 前沿AI产品热门应用在线等你来发掘注本文撰写于CSDN平台,作者xcLeigh所有权归作者所有https://xcleigh.blog.csdn.net/如果相关下载没有跳转请查看这个地址相关链接没有跳转皆是抄袭本文转载请备注本文原地址。 亲码字不易动动小手欢迎点赞 ➕ 收藏如 问题请留言或者关注下方公众号看见后第一时间回复还有海量编程资料等你来领博主看见后一定及时给您答复