datetime模块:处理日期和时间的基础工具
在日常开发中,处理时间是绕不开的任务。比如记录用户登录时间、计算订单有效期,或者安排定时任务,这时候Python自带的datetime模块就派上用场了。
它提供了几个核心类:datetime、date、time、timedelta,分别用于表示具体时间点、日期、时间以及时间差。
from datetime import datetime, date, timedelta
# 获取当前时间
now = datetime.now()
print(now) # 输出类似:2024-04-05 14:30:25.123456
# 只获取今天日期
today = date.today()
print(today) # 输出:2024-04-05
# 计算三天后的时间
future = now + timedelta(days=3)
print(future)
格式化输出:让时间更易读
默认打印出来的时间字符串虽然完整,但不够友好。比如日志里显示“2024-04-05T14:30:25”不如“4月5日下午2:30”直观。strftime()方法可以按需定制格式。
# 将时间转为中文习惯的格式
dt = datetime.now()
formatted = dt.strftime('%Y年%m月%d日 %H:%M')
print(formatted) # 输出:2024年04月05日 14:30
# 常见格式符号说明
# %Y:四位年份;%m:月份(01-12);%d:日期(01-31)
# %H:小时(24小时制);%M:分钟;%S:秒
解析字符串时间:从文本还原成时间对象
很多时候时间是以字符串形式存在的,比如从网页表单或配置文件读取的“2024/04/05”。这时可以用strptime()把它转成datetime对象进行计算。
# 解析自定义格式的时间字符串
date_str = '2024/04/05'
date_obj = datetime.strptime(date_str, '%Y/%m/%d')
print(date_obj) # 输出:2024-04-05 00:00:00
时区处理:避免跨地区出错
如果你的应用服务全球用户,忽略时区可能会导致问题。比如北京时间比UTC早8小时,直接用本地时间判断“是否超过截止时间”可能误判。
Python 3.9+ 的zoneinfo模块能方便地处理时区,无需额外安装依赖。
from datetime import datetime
from zoneinfo import ZoneInfo
# 创建带时区的时间对象
beijing_time = datetime.now(ZoneInfo('Asia/Shanghai'))
utc_time = datetime.now(ZoneInfo('UTC'))
print(beijing_time) # 显示带+08:00偏移
print(utc_time)
第三方库:dateutil让操作更简单
标准库功能够用,但有些场景稍显繁琐。比如想解析“2024-04-05”、“Apr 5, 2024”这类多种格式混合的字符串,dateutil的parser就特别省心。
先通过pip install python-dateutil安装,然后使用:
from dateutil import parser
# 自动识别多种时间格式
date1 = parser.parse('2024-04-05')
date2 = parser.parse('Apr 5, 2024 at 3:30 PM')
print(date1)
print(date2)
这个库还能轻松处理相对时间,比如“下周一”、“三天前”,对自然语言时间的支持很实用。