Python datetime库的用法 Python从入门到入土系列第3篇-洞察标准库DateTime
Python datetime库详解及实践案例
datetime是Python处理日期时间的核心标准库,提供日期、时间、时间间隔和时区操作功能。本文将通过15个代码示例详细解析其核心用法。
一、模块结构解析
datetime库包含5个主要类:
-  datetime.date:处理日期(年、月、日)
-  datetime.time:处理时间(时、分、秒、微秒)
-  datetime.datetime:日期时间复合对象
-  datetime.timedelta:时间间隔
-  datetime.tzinfo:时区信息基类
二、date对象基础操作
1. 创建日期对象
from datetime import date# 创建指定日期
d = date(2023, 12, 25)
print(d)  # 2023-12-25# 获取当前日期
today = date.today()
print(f"Today: {today}")  # Today: 2023-08-20(当日日期)2. 日期属性访问
print(f"Year: {d.year}")  # Year: 2023
print(f"Month: {d.month}")  # Month: 12
print(f"Day: {d.day}")  # Day: 25三、time对象操作
3. 创建时间对象
from datetime import timet = time(14, 30, 45, 123456)
print(t)  # 14:30:45.123456print(f"Hour: {t.hour}")  # 14
print(f"Minute: {t.minute}")  # 30
print(f"Second: {t.second}")  # 45
print(f"Microsecond: {t.microsecond}")  # 123456四、datetime复合对象
4. 创建日期时间
from datetime import datetime# 当前时间(本地)
now = datetime.now()
print(now)  # 2023-08-20 15:30:45.123456# 指定日期时间创建
dt = datetime(2023, 8, 20, 9, 30, 15)
print(dt)  # 2023-08-20 09:30:155. 时间戳转换
# 获取当前时间戳
timestamp = datetime.now().timestamp()
print(timestamp)  # 1692595845.123456# 时间戳转datetime
dt_from_ts = datetime.fromtimestamp(1692595845)
print(dt_from_ts)  # 2023-08-20 15:30:45五、时间格式化与解析
6. 格式化输出(strftime)
dt = datetime(2023, 8, 20, 15, 30)
print(dt.strftime("%Y-%m-%d %H:%M:%S"))  # 2023-08-20 15:30:00
print(dt.strftime("%A, %d %B %Y"))  # Sunday, 20 August 20237. 字符串解析(strptime)
date_str = "2023-12-25 18:30"
dt = datetime.strptime(date_str, "%Y-%m-%d %H:%M")
print(dt)  # 2023-12-25 18:30:00六、时间间隔计算(timedelta)
8. 基础时间运算
from datetime import timedeltadt = datetime(2023, 8, 20)
delta = timedelta(days=7, hours=3)print(dt + delta)  # 2023-08-27 03:00:00
print(dt - delta)  # 2023-08-12 21:00:009. 日期差计算
date1 = date(2023, 8, 20)
date2 = date(2023, 9, 1)
delta = date2 - date1
print(delta.days)  # 12七、时区处理(需pytz库)
10. 时区转换
import pytz
from datetime import datetime# 创建带时区的时间
utc_time = datetime.now(pytz.utc)
print(utc_time)  # 2023-08-20 07:30:45.123456+00:00# 转换时区
tz_shanghai = pytz.timezone('Asia/Shanghai')
local_time = utc_time.astimezone(tz_shanghai)
print(local_time)  # 2023-08-20 15:30:45.123456+08:00八、综合实践案例
案例1:会议提醒系统
from datetime import datetime, timedelta# 设置会议时间
meeting_time = datetime(2023, 8, 25, 14, 0)
current_time = datetime.now()# 计算时间差
delta = meeting_time - current_timeif delta.days < 0:print("会议已结束")
else:hours = delta.seconds // 3600minutes = (delta.seconds % 3600) // 60print(f"距离会议还有 {delta.days} 天 {hours} 小时 {minutes} 分钟")案例2:考勤时间计算
def calculate_working_hours(check_in, check_out):"""计算工作时长"""delta = check_out - check_inhours = delta.seconds // 3600minutes = (delta.seconds % 3600) // 60return f"{hours}小时{minutes}分钟"# 输入时间格式:HH:MM
check_in = datetime.strptime("09:15", "%H:%M")
check_out = datetime.strptime("18:30", "%H:%M")
print(calculate_working_hours(check_in, check_out))  # 9小时15分钟九、常见格式符号速查表
| 符号 | 说明 | 示例 | 
|---|---|---|
| %Y | 四位年份 | 2023 | 
| %m | 两位月份 | 08 | 
| %d | 两位日期 | 20 | 
| %H | 24小时制小时 | 15 | 
| %I | 12小时制小时 | 03 | 
| %M | 分钟 | 30 | 
| %S | 秒 | 45 | 
| %A | 完整星期名称 | Monday | 
| %B | 完整月份名称 | August | 
| %p | AM/PM标识 | PM | 
通过以上15个示例,我们全面覆盖了datetime库的核心功能。实际开发中,结合具体需求灵活运用这些方法,可以高效处理各种日期时间相关业务场景。特别注意时区处理建议使用pytz库,确保时间计算的准确性。
