Python
基础语法
01概念
02安装
03变量
04字符串
05数
06常量与注释
07列表
08元组
09if语句
10字典
11集合
12复合数据类型对比
13推导式
14用户输入
15while循环
16函数
17类
18面向对象编程
19文件操作
20异常处理
21日期和时间
22魔术方法
23内置函数
24线程
25并发&并行
26正则表达式
27迭代器
28装饰器
29生成器
30上下文管理器
31函数式编程
32闭包
33解包
34工具库
35连接关系型数据库
36虚拟环境
37异步编程
网络爬虫
01urllib库[了解]
02requests库
03数据交换格式
04解析库
05lxml
06Beautiful Soup
07Xpath语法
08动态网页的处理
-
+
首页
21日期和时间
在 Python 中,日期和时间的处理主要依赖于**内置模块**(如datetime、time、calendar)和部分**第三方库**(如pytz、python-dateutil)。这些工具覆盖了从 “获取当前时间”“格式化输出” 到 “时区转换”“时间差计算” 等几乎所有场景,是处理时间相关逻辑的核心。 ## 模块概述 Python 中处理日期时间的模块各有侧重,最常用的是datetime(功能最全面),其次是time(偏底层时间操作)和calendar(日历相关): | 模块 | 核心功能 | 适用场景 | | -------- | ------------------------------------------------------------ | ------------------------------------------- | | datetime | 提供日期(date)、时间(time)、日期时间(datetime)、时间差(timedelta)等类 | 绝大多数场景(格式化、解析、计算、时区) | | time | 处理底层时间(如时间戳、休眠、时间结构) | 获取时间戳、程序休眠、与 C 语言时间接口交互 | | calendar | 日历生成、闰年判断、月份天数计算 | 生成日历、判断日期是否为工作日等 | | 第三方库 | pytz(时区处理)、python-dateutil(解析 / 计算) | 复杂时区转换、灵活解析不规则时间字符串 | ## datetime模块 datetime模块是 Python 处理日期时间的 “主力军”,包含 5 个核心类,覆盖所有基础操作: | 类名 | 功能描述 | 示例 | | ------------------ | -------------------------------------------------- | ---------------------------------------- | | datetime.date | 处理**日期**(年、月、日) | date(2024, 5, 20) → 2024 年 5 月 20 日 | | datetime.time | 处理**时间**(时、分、秒、微秒) | time(14, 30, 45) → 14 时 30 分 45 秒 | | datetime.datetime | 处理**日期 + 时间**(综合上述两者) | datetime(2024, 5, 20, 14, 30, 45) | | datetime.timedelta | 处理**时间差**(天、小时、分钟等) | timedelta(days=3, hours=2) → 3 天 2 小时 | | datetime.tzinfo | 抽象基类,用于**时区**定义(需自定义或用第三方库) | 配合datetime实现时区感知 | - **手动创建**:通过类的构造函数传入具体值(注意:月份范围 1-12,日期范围 1 - 当月最大天数,时间范围 0-23/0-59/0-59)。 - **获取当前时间**:通过today()或now()方法获取当前日期 / 时间。 ```python from datetime import date, time, datetime # 1. date类(仅日期) d1 = date(2024, 5, 20) # 手动创建:年、月、日 d2 = date.today() # 获取当前日期(本地时间) print(d1) # 输出:2024-05-20 print(d2.year, d2.month, d2.day) # 输出:2024 5 20(获取年/月/日属性) # 2. time类(仅时间) t1 = time(14, 30, 45, 123456) # 时、分、秒、微秒(微秒可选) t2 = time(hour=9, minute=0) # 用关键字参数创建 print(t1) # 输出:14:30:45.123456 print(t2.hour, t2.minute) # 输出:9 0(获取时/分属性) # 3. datetime类(日期+时间) dt1 = datetime(2024, 5, 20, 14, 30, 45) # 手动创建,年、月、日、时、分、秒 dt2 = datetime.now() # 获取当前日期时间(本地时间) dt3 = datetime.today() # 等价于now()(无时区时) print(dt1) # 输出:2024-05-20 14:30:45 print(dt2.year, dt2.hour, dt2.microsecond) # 输出:2024 14 123456 ``` 输出结果: ```python 2024-05-20 2025 8 30 14:30:45.123456 9 0 2024-05-20 14:30:45 2025 10 708931 ``` **格式化输出**:strftime(),将date/time/datetime对象转换为字符串,需指定 “格式化符号”(常用符号见下表)。 ```python from datetime import datetime dt = datetime(2024, 5, 20, 14, 30, 45) # 格式化输出(常用格式) print(dt.strftime("%Y-%m-%d")) # 输出:2024-05-20(日期) print(dt.strftime("%H:%M:%S")) # 输出:14:30:45(时间) print(dt.strftime("%Y-%m-%d %H:%M:%S")) # 输出:2024-05-20 14:30:45(完整格式) print(dt.strftime("%m/%d/%Y %I:%M %p")) # 输出:05/20/2024 02:30 PM(12小时制+AM/PM) ``` 输出结果: ```python 2024-05-20 14:30:45 2024-05-20 14:30:45 05/20/2024 02:30 PM ``` 格式化符号: | 符号 | 含义 | 示例 | | ---- | ---------------------- | ---- | | %Y | 4 位年份 | 2024 | | %m | 2 位月份(01-12) | 05 | | %d | 2 位日期(01-31) | 20 | | %H | 24 小时制小时(00-23) | 14 | | %I | 12 小时制小时(01-12) | 02 | | %M | 2 位分钟(00-59) | 30 | | %S | 2 位秒(00-59) | 45 | | %p | AM/PM(12 小时制) | PM | | %w | 星期(0-6,0 是周日) | 1 | | %B | 月份全称 | May | | %b | 月份缩写 | May | 解析字符串:strptime(),将**字符串**转换为datetime对象(需指定字符串对应的 “格式化符号”,与strftime对应),是strftime的逆操作。 ```python from datetime import datetime # 解析字符串为datetime对象 str1 = "2024-05-20 14:30:45" dt1 = datetime.strptime(str1, "%Y-%m-%d %H:%M:%S") print(type(dt1), dt1) # 输出:<class 'datetime.datetime'> 2024-05-20 14:30:45 # 解析其他格式的字符串 str2 = "05/20/2024 02:30 PM" dt2 = datetime.strptime(str2, "%m/%d/%Y %I:%M %p") print(dt2) # 输出:2024-05-20 14:30:00 ``` 输出结果: ```python <class 'datetime.datetime'> 2024-05-20 14:30:45 2024-05-20 14:30:00 ``` ## time模块 time模块更偏向 “底层时间机制”,主要处理**时间戳**(从 1970 年 1 月 1 日 00:00:00 UTC 开始的秒数)和程序休眠,常用函数如下: | 函数 | 功能描述 | 示例 | | -------------------------- | ------------------------------------------ | ---------------------------------------------------------- | | time.time() | 获取当前时间戳(秒,含小数部分) | time.time() → 1716225000.123456 | | time.sleep(secs) | 程序休眠指定秒数(可传小数,如 0.5 秒) | time.sleep(2) → 休眠 2 秒 | | time.localtime([secs]) | 将时间戳转为本地时间的 “时间结构”(tuple) | time.localtime() → time.struct_time(tm_year=2024,...) | | time.strftime(format, [t]) | 将时间结构转为字符串 | time.strftime("%Y-%m-%d", time.localtime()) → "2024-05-20" | ```python import time # 1. 获取时间戳 timestamp = time.time() print(timestamp) # 输出:1716225000.123456(秒为单位,小数是微秒) # 2. 时间戳转为datetime对象 from datetime import datetime dt = datetime.fromtimestamp(timestamp) # 本地时间 print(dt) # 输出:2024-05-20 14:30:00.123456 # 3. 程序休眠 print("开始休眠...") time.sleep(2) # 休眠2秒 print("休眠结束!") # 4. 时间结构与字符串转换 t_struct = time.localtime() # 本地时间结构 str_time = time.strftime("%Y-%m-%d %H:%M:%S", t_struct) print(str_time) # 输出:2024-05-20 14:30:00 ``` 输出结果: ```python 1756522164.0488105 2025-08-30 10:49:24.048810 开始休眠... 休眠结束! 2025-08-30 10:49:26 ``` ## calendar模块 calendar模块专注于 “日历生成” 和 “日期属性判断”,常用函数如下: | 函数 | 功能描述 | 示例 | | -------------------------------- | ------------------------------------- | ------------------------------------------------------- | | calendar.isleap(year) | 判断年份是否为闰年 | calendar.isleap(2024) → True | | calendar.monthrange(year, month) | 返回(该月 1 号是星期几,该月总天数) | calendar.monthrange(2024,5) → (1,31)(1 是周一,31 天) | | calendar.month(year, month) | 生成该月的日历字符串 | calendar.month(2024,5) → 打印 5 月日历 | | calendar.prcal(year) | 打印全年日历 | calendar.prcal(2024) → 打印 2024 年全年日历 | ```python import calendar # 1. 判断闰年 print(calendar.isleap(2024)) # 输出:True(2024是闰年) print(calendar.isleap(2025)) # 输出:False(2023不是闰年) # 2. 获取月份信息(1号是星期几,总天数) weekday, days = calendar.monthrange(2025, 10) print(weekday, days) # 输出:1 31(weekday=0是周日,1是周一;) # 3. 生成月份日历 print(calendar.month(2025, 9)) # 4. 打印全年日历 calendar.prcal(2025) # 打印2025年全年日历(控制台输出) ``` 输出结果: ```python True False 2 31 September 2025 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 2025 January February March Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 1 2 1 2 6 7 8 9 10 11 12 3 4 5 6 7 8 9 3 4 5 6 7 8 9 13 14 15 16 17 18 19 10 11 12 13 14 15 16 10 11 12 13 14 15 16 20 21 22 23 24 25 26 17 18 19 20 21 22 23 17 18 19 20 21 22 23 27 28 29 30 31 24 25 26 27 28 24 25 26 27 28 29 30 31 April May June Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 1 2 3 4 1 7 8 9 10 11 12 13 5 6 7 8 9 10 11 2 3 4 5 6 7 8 14 15 16 17 18 19 20 12 13 14 15 16 17 18 9 10 11 12 13 14 15 21 22 23 24 25 26 27 19 20 21 22 23 24 25 16 17 18 19 20 21 22 28 29 30 26 27 28 29 30 31 23 24 25 26 27 28 29 30 July August September Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 1 2 3 1 2 3 4 5 6 7 7 8 9 10 11 12 13 4 5 6 7 8 9 10 8 9 10 11 12 13 14 14 15 16 17 18 19 20 11 12 13 14 15 16 17 15 16 17 18 19 20 21 21 22 23 24 25 26 27 18 19 20 21 22 23 24 22 23 24 25 26 27 28 28 29 30 31 25 26 27 28 29 30 31 29 30 October November December Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 1 2 1 2 3 4 5 6 7 6 7 8 9 10 11 12 3 4 5 6 7 8 9 8 9 10 11 12 13 14 13 14 15 16 17 18 19 10 11 12 13 14 15 16 15 16 17 18 19 20 21 20 21 22 23 24 25 26 17 18 19 20 21 22 23 22 23 24 25 26 27 28 27 28 29 30 31 24 25 26 27 28 29 30 29 30 31 ```
毛林
2025年9月7日 11:45
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码