⏰ Python日期时间处理完全指南:从datetime到实战技巧
📌 引言
在Python编程中,日期和时间的处理是不可或缺的技能。无论是记录日志、处理用户数据,还是构建定时任务,都需要与日期时间打交道。本文将深入讲解Python的datetime模块,从基础概念到实战技巧,帮助你彻底掌握日期时间处理。
🎯 一、datetime模块核心类
Python的datetime模块提供了五个核心类:
- date:日期(年、月、日)
- time:时间(时、分、秒、微秒)
- datetime:日期和时间的组合
- timedelta:两个日期/时间之间的差值
- tzinfo:时区信息基类
💻 二、基础操作代码示例
1. 获取当前日期时间
from datetime import datetime, date, time
# 获取当前日期时间
now = datetime.now()
print(f"当前日期时间: {now}")
print(f"当前日期: {date.today()}")
# 获取具体时间组件
print(f"年: {now.year}, 月: {now.month}, 日: {now.day}")
print(f"时: {now.hour}, 分: {now.minute}, 秒: {now.second}")
2. 创建自定义日期时间
from datetime import datetime, date, time
# 创建自定义日期
d = date(2024, 3, 15)
print(f"自定义日期: {d}")
# 创建自定义时间
t = time(14, 30, 0)
print(f"自定义时间: {t}")
# 创建自定义日期时间
dt = datetime(2024, 3, 15, 14, 30, 0)
print(f"自定义日期时间: {dt}")
3. 日期时间格式化
from datetime import datetime
now = datetime.now()
# strftime: 日期时间 -> 字符串
formatted = now.strftime("%Y-%m-%d %H:%M:%S")
print(f"格式化后: {formatted}")
# 常用格式代码
print(now.strftime("%Y年%m月%d日")) # 2024年03月15日
print(now.strftime("%H:%M:%S")) # 14:30:00
print(now.strftime("%A, %B %d, %Y")) # Friday, March 15, 2024
# strptime: 字符串 -> 日期时间
date_str = "2024-03-15 14:30:00"
parsed = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print(f"解析后: {parsed}")
⚡ 三、timedelta时间计算
from datetime import datetime, timedelta
now = datetime.now()
# 加/减天数
future = now + timedelta(days=7)
past = now - timedelta(days=7)
print(f"7天后: {future}")
print(f"7天前: {past}")
# 加/减小时、分钟
future_time = now + timedelta(hours=2, minutes=30)
print(f"2小时30分钟后: {future_time}")
# 计算时间差
deadline = datetime(2024, 12, 31)
diff = deadline - now
print(f"距离年底还有: {diff.days} 天")
🌍 四、时区处理
from datetime import datetime
import pytz
# 获取当前UTC时间
utc_now = datetime.now(pytz.UTC)
print(f"UTC时间: {utc_now}")
# 转换为特定时区
beijing_tz = pytz.timezone('Asia/Shanghai')
beijing_now = utc_now.astimezone(beijing_tz)
print(f"北京时间: {beijing_now}")
# 常用时区
ny_tz = pytz.timezone('America/New_York')
tokyo_tz = pytz.timezone('Asia/Tokyo')
print(f"纽约时间: {utc_now.astimezone(ny_tz)}")
print(f"东京时间: {utc_now.astimezone(tokyo_tz)}")
🛠️ 五、实战技巧
1. 计算两个日期之间的所有日期
from datetime import datetime, timedelta
def date_range(start_date, end_date):
"""生成日期范围内的所有日期"""
current = start_date
while current <= end_date:
yield current
current += timedelta(days=1)
start = datetime(2024, 3, 1)
end = datetime(2024, 3, 5)
for d in date_range(start, end):
print(d.strftime("%Y-%m-%d"))
2. 获取本月第一天和最后一天
from datetime import datetime, timedelta
import calendar
def month_bounds(year, month):
"""获取指定月份的第一天和最后一天"""
first_day = datetime(year, month, 1)
last_day_num = calendar.monthrange(year, month)[1]
last_day = datetime(year, month, last_day_num)
return first_day, last_day
first, last = month_bounds(2024, 3)
print(f"3月从 {first.date()} 到 {last.date()}")
3. 时间戳转换
from datetime import datetime
import time
# 当前时间戳(秒)
timestamp = time.time()
print(f"当前时间戳: {timestamp}")
# 时间戳转日期时间
dt_from_ts = datetime.fromtimestamp(timestamp)
print(f"时间戳转日期时间: {dt_from_ts}")
# 日期时间转时间戳
ts = int(datetime.now().timestamp())
print(f"日期时间转时间戳: {ts}")
📋 六、常用格式代码表
| 代码 | 含义 | 示例 |
|---|---|---|
| %Y | 4位年份 | 2024 |
| %m | 2位月份 | 03 |
| %d | 2位日期 | 15 |
| %H | 24小时制小时 | 14 |
| %M | 分钟 | 30 |
| %S | 秒 | 00 |
| %A | 星期几(全称) | Friday |
| %B | 月份(全称) | March |
🎓 总结
本文详细介绍了Python日期时间处理的核心知识:
- datetime模块:掌握date、time、datetime、timedelta四大核心类
- 格式化与解析:熟练使用strftime和strptime进行格式转换
- 时间计算:使用timedelta进行日期时间的加减运算
- 时区处理:借助pytz库处理跨时区场景
- 实战技巧:日期范围生成、月份边界计算、时间戳转换
掌握这些技能后,你就能轻松应对各种日期时间处理需求。记住:好的时间处理代码是健壮系统的基石。
(本文内容部分由AI辅助生成,代码示例均经过实际测试。)

浙公网安备 33010602011771号