当前位置: 首页 > news >正文

09-扩展知识——02. 初识 datetime 模块

02. 初识 datetime 模块

概述

datetime是 Python 处理日期和时间的核心模块,提供了datetimedatetimetimedeltatzinfo五个主要类。掌握这个模块是时间处理的基础。

维度内容
Whatdatetime 模块的五大核心类及其基本用法
Why日常日期时间操作的首选模块
When需要处理日期、时间、时间差、时区时
Whereimport datetimefrom datetime import date, time, datetime
Who所有 Python 开发者
How根据需求选择合适的类和方法

1. datetime 模块五大类概览

┌─────────────────────────────────────────────────────────────────┐ │ datetime 模块五大类 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ date - 处理日期(年、月、日) │ │ time - 处理时间(时、分、秒、微秒) │ │ datetime - 处理日期 + 时间(date + time) │ │ timedelta - 处理时间差/持续时间 │ │ tzinfo - 时区信息基类(抽象类) │ │ timezone - 时区实现类(Python 3.2+,tzinfo 的子类) │ │ │ └─────────────────────────────────────────────────────────────────┘

1.1 五大类对比

最小单位是否包含时区常见用途
date生日、节假日、日期范围
time微秒✅(可选)时间点、闹钟
datetime微秒✅(可选)时间戳、日志、订单时间
timedelta微秒时间差、倒计时
tzinfo-时区定义(基类)

2. 导入方式

# 方式1:导入整个模块(推荐,避免命名冲突)importdatetime d=datetime.date(2026,4,19)now=datetime.datetime.now()# 方式2:直接导入需要的类fromdatetimeimportdate,time,datetime,timedelta,timezone d=date(2026,4,19)now=datetime.now()# 方式3:导入所有(不推荐)fromdatetimeimport*

3. date 类(日期)

3.1 创建 date 对象

fromdatetimeimportdate# 方式1:直接指定年月日d=date(2026,4,19)print(d)# 2026-04-19print(type(d))# <class 'datetime.date'># 方式2:获取当前日期today=date.today()print(today)# 2026-04-19# 方式3:从时间戳创建importtime timestamp=time.time()d=date.fromtimestamp(timestamp)print(d)# 2026-04-19# 方式4:从 ISO 格式字符串创建(Python 3.7+)d=date.fromisoformat("2026-04-19")print(d)# 2026-04-19

3.2 date 属性和方法

fromdatetimeimportdate d=date(2026,4,19)# 属性print(f"年:{d.year}")# 2026print(f"月:{d.month}")# 4print(f"日:{d.day}")# 19# 方法print(f"替换:{d.replace(month=5)}")# 2026-05-19print(f"时间元组:{d.timetuple()}")# struct_timeprint(f"序号:{d.toordinal()}")# 从公元1年1月1日的天数print(f"星期(0=周一):{d.weekday()}")# 6(周日)print(f"星期(1=周一):{d.isoweekday()}")# 7(周日)print(f"ISO格式:{d.isoformat()}")# 2026-04-19print(f"CTime格式:{d.ctime()}")# Sun Apr 19 00:00:00 2026print(f"格式化:{d.strftime('%Y年%m月%d日')}")# 2026年04月19日

3.3 星期对照表

方法周一周二周三周四周五周六周日
weekday()0123456
isoweekday()1234567

4. time 类(时间)

4.1 创建 time 对象

fromdatetimeimporttime# 基本创建t=time(14,30,15,500000)# 时、分、秒、微秒print(t)# 14:30:15.500000# 最小参数t=time(14,30)# 14:30:00print(t)# 14:30:00# 从 ISO 格式字符串创建(Python 3.7+)t=time.fromisoformat("14:30:15.5")print(t)# 14:30:15.500000

4.2 time 属性和方法

fromdatetimeimporttime t=time(14,30,15,500000)# 属性print(f"时:{t.hour}")# 14print(f"分:{t.minute}")# 30print(f"秒:{t.second}")# 15print(f"微秒:{t.microsecond}")# 500000# 方法print(f"替换:{t.replace(hour=10)}")# 10:30:15.500000print(f"ISO格式:{t.isoformat()}")# 14:30:15.500000print(f"格式化:{t.strftime('%H点%M分')}")# 14点30分

4.3 time 的 tzinfo 参数

fromdatetimeimporttime,timezone# 创建带时区的时间utc_time=time(14,30,tzinfo=timezone.utc)print(utc_time)# 14:30:00+00:00print(utc_time.tzname())# UTC

5. datetime 类(日期 + 时间)

5.1 创建 datetime 对象

fromdatetimeimportdatetime,timezoneimporttime# 方式1:直接指定dt=datetime(2026,4,19,14,30,15,500000)print(dt)# 2026-04-19 14:30:15.500000# 方式2:获取当前时间now=datetime.now()# 本地时间print(now)# 2026-04-19 09:30:00.123456utc_now=datetime.now(timezone.utc)# UTC 时间print(utc_now)# 2026-04-19 01:30:00.123456+00:00# 方式3:从时间戳创建timestamp=time.time()dt=datetime.fromtimestamp(timestamp)print(dt)# 2026-04-19 09:30:00.123456# 方式4:组合 date 和 timed=date(2026,4,19)t=time(14,30,15)dt=datetime.combine(d,t)print(dt)# 2026-04-19 14:30:15# 方式5:从 ISO 格式字符串创建dt=datetime.fromisoformat("2026-04-19T14:30:15")print(dt)# 2026-04-19 14:30:15# 方式6:从字符串解析dt=datetime.strptime("2026-04-19 14:30:15","%Y-%m-%d %H:%M:%S")print(dt)# 2026-04-19 14:30:15

5.2 datetime 属性和方法

fromdatetimeimportdatetime dt=datetime(2026,4,19,14,30,15,500000)# 属性(包含 date 和 time 的所有属性)print(f"年:{dt.year}")print(f"月:{dt.month}")print(f"日:{dt.day}")print(f"时:{dt.hour}")print(f"分:{dt.minute}")print(f"秒:{dt.second}")print(f"微秒:{dt.microsecond}")# 方法print(f"日期部分:{dt.date()}")# 2026-04-19print(f"时间部分:{dt.time()}")# 14:30:15.500000print(f"时间部分(有时区):{dt.timetz()}")print(f"替换:{dt.replace(month=5)}")# 2026-05-19 14:30:15.500000print(f"星期(0=周一):{dt.weekday()}")print(f"星期(1=周一):{dt.isoweekday()}")print(f"ISO格式:{dt.isoformat()}")# 2026-04-19T14:30:15.500000print(f"时间戳:{dt.timestamp()}")print(f"CTime格式:{dt.ctime()}")# Sun Apr 19 14:30:15 2026

6. timedelta 类(时间差)

6.1 创建 timedelta 对象

fromdatetimeimporttimedelta# 可以使用的参数td=timedelta(days=1,seconds=3600,microseconds=500,milliseconds=100,minutes=30,hours=2,weeks=1)print(td)# 8 days, 3:30:00.000500# 常用创建方式day=timedelta(days=1)# 1 day, 0:00:00hour=timedelta(hours=1)# 1:00:00minute=timedelta(minutes=1)# 0:01:00second=timedelta(seconds=1)# 0:00:01week=timedelta(weeks=1)# 7 days, 0:00:00

6.2 timedelta 属性和方法

fromdatetimeimporttimedelta td=timedelta(days=5,hours=3,minutes=30,seconds=15)# 属性(归一化后的值)print(f"天数:{td.days}")# 5print(f"秒数部分:{td.seconds}")# 12615 (3*3600 + 30*60 + 15)print(f"微秒部分:{td.microseconds}")# 0# 方法print(f"总秒数:{td.total_seconds()}")# 5*86400 + 12615 = 444615.0

6.3 timedelta 运算

fromdatetimeimportdatetime,timedelta now=datetime.now()# 加法:未来时间tomorrow=now+timedelta(days=1)next_week=now+timedelta(weeks=1)next_hour=now+timedelta(hours=1)# 减法:过去时间yesterday=now-timedelta(days=1)last_week=now-timedelta(weeks=1)# 两个 timedelta 运算td1=timedelta(days=5,hours=3)td2=timedelta(days=2,hours=5)print(td1+td2)# 7 days, 8:00:00print(td1-td2)# 2 days, 22:00:00print(td1*2)# 10 days, 6:00:00print(td1/2)# 2 days, 13:30:00

7. timezone 类(时区)

fromdatetimeimportdatetime,timezone,timedelta# UTC 时区utc=timezone.utcprint(utc)# UTC# 自定义偏移时区beijing_tz=timezone(timedelta(hours=8))print(beijing_tz)# UTC+08:00# 创建带时区的 datetimenow_utc=datetime.now(timezone.utc)now_beijing=datetime.now(beijing_tz)print(f"UTC:{now_utc}")print(f"北京时间:{now_beijing}")

8. 综合示例

fromdatetimeimportdate,time,datetime,timedelta,timezoneprint("="*50)print("datetime 模块综合示例")print("="*50)# 1. 创建各种对象print("\n1. 创建对象")d=date(2026,4,19)t=time(14,30,15)dt=datetime(2026,4,19,14,30,15)td=timedelta(days=7)print(f"日期:{d}")print(f"时间:{t}")print(f"日期时间:{dt}")print(f"时间差:{td}")# 2. 获取当前时间print("\n2. 获取当前时间")print(f"当前日期:{date.today()}")print(f"当前日期时间:{datetime.now()}")print(f"UTC 时间:{datetime.now(timezone.utc)}")# 3. 时间运算print("\n3. 时间运算")now=datetime.now()week_later=now+timedelta(weeks=1)diff=week_later-nowprint(f"现在:{now}")print(f"一周后:{week_later}")print(f"时间差:{diff}")print(f"总秒数:{diff.total_seconds()}")# 4. 提取各部分print("\n4. 提取日期时间各部分")dt=datetime(2026,4,19,14,30,15)print(f"完整:{dt}")print(f"年:{dt.year}, 月:{dt.month}, 日:{dt.day}")print(f"时:{dt.hour}, 分:{dt.minute}, 秒:{dt.second}")print(f"星期:{dt.strftime('%A')}")# 5. 字符串解析print("\n5. 字符串解析与格式化")date_str="2026-04-19 14:30:15"dt_parsed=datetime.strptime(date_str,"%Y-%m-%d %H:%M:%S")print(f"解析:{dt_parsed}")print(f"格式化:{dt_parsed.strftime('%Y年%m月%d日 %H时%M分%S秒')}")

9. 常见问题

问题解决方案
datetime(2026, 13, 1)报错月份必须在 1-12 之间
datetime(2026, 4, 32)报错天数必须在有效范围内
naive 和 aware 比较报错统一转换为同一类型
时区转换错误使用astimezone()方法

10. 总结

核心用途常用方法
date处理日期today(),weekday(),replace()
time处理时间replace(),isoformat()
datetime处理日期+时间now(),strptime(),strftime()
timedelta处理时间差total_seconds()
timezone处理时区utc常量

http://www.jsqmd.com/news/779702/

相关文章:

  • 2026年5月新发布财务审计服务推荐:宁波海曙英策企业管理咨询有限公司,跨境财务审计合规专家 - 2026年企业推荐榜
  • 嵌入式C/C++编程实战:类型安全与内存管理
  • AI工具集架构设计:统一接口、适配器模式与工程化实践
  • 2026年第二季度硬盘回收市场解析:为何湖南芯源再生科技备受关注 - 2026年企业推荐榜
  • 沈阳口碑好的养发品牌推荐?黑奥秘专利成分矩阵,温和调理脱发白发 - 美业信息观察
  • PromptScript:用TypeScript实现AI提示词工程化与团队协作
  • SON自动添加邻站功能
  • 第二部分-Docker核心原理——10. 容器网络原理
  • 2026年5月新消息:汕头智能热成型机优质厂家路百拓机械深度解析 - 2026年企业推荐榜
  • Spring 参数验证使用示例(基于 RuoYi 项目)
  • 如何截断SQL小数位数_使用TRUNCATE函数控制精度.txt
  • 2026年最新降AI软件排行:深度揭秘降AI原理,选降AI工具不踩坑! - 我要发一区
  • 如何理解 Kubernetes 的架构设计与实现原理?
  • 2026年至今,连云港天然朱砂实力门店盘点与优选分析:小白家高含量朱砂 - 2026年企业推荐榜
  • 将地址转换为可点击的 Google Maps 链接(类似 tel- 协议).txt
  • 关于hopfield 网络和受限玻尔兹曼机,其如何为现代深度学习奠基?
  • 别再瞎调WPF Grid布局了!Auto和*的实战用法,看完这篇就够了
  • Cortex-M调试连接器技术解析与应用实践
  • 同一件事的哪一层?——跨文化概念对勘的三阶校准法则
  • 四川盛世钢联国际贸易有限公司型钢频道 -螺纹钢|盘螺|盘圆|高线|高强钢 - 四川盛世钢联营销中心
  • 从“想”到“做”:手把手教你实现AI Agent Loop循环机制,解锁智能体进阶玩法!
  • 测试左移+AI:质量内建的终极形态?
  • FreeIPA容器化部署指南:从镜像选择到生产环境配置
  • 16.【Verilog】Verilog 时钟分频
  • Sonatype Nexus Repository Pro本地软件制品仓库
  • 3401黄大年茶思屋榜文保姆级全落地解法「34期 1题」全系统可编程安全易用高效统一架构重构与原约束双路径落地解法
  • 从机械转行互联网CV后,我决定再转多模态大模型,我的GitHub学习日志,带你避坑多模态转型之路!
  • 论文AIGC检测超标?一键去除论文AI率,只需要几分钟! - 我要发一区
  • 哪个降AI率工具好用?2026年5月最新测评,深度拆解降AI原理! - 我要发一区
  • 全网盘点降AI率工具:实测知网降AI效果,嘎嘎降遥遥领先! - 我要发一区