每天早上七点,手机闹钟准时响起。你可能没意识到,背后就是一段代码在计算时间。在写 Python 脚本时,处理时间几乎无处不在——记录日志、安排任务、分析数据,都绕不开日期和时间。
datetime:最常用的起点
Python 自带的 datetime 模块是大多数人最先接触的工具。它能轻松创建当前时间:
from datetime import datetime
now = datetime.now()
print(now) # 输出类似:2025-04-05 08:30:15.123456
想只保留年月日?用 date() 方法就行:
today = datetime.now().date()
print(today) # 输出:2025-04-05
格式化输出:让时间更易读
从数据库取出的时间常常是一长串数字,用户可不买账。这时候 strftime() 就派上用场了:
formatted = now.strftime("%Y年%m月%d日 %H:%M")
print(formatted) # 输出:2025年04月05日 08:30
反过来,如果你收到一个字符串形式的日期,比如 "2025-03-20",可以用 strptime() 把它转成 datetime 对象:
date_str = "2025-03-20"
date_obj = datetime.strptime(date_str, "%Y-%m-%d")
timedelta:做时间的加减法
想知道三天后是周几?或者统计过去一周的登录次数?timedelta 可以让你对时间做算术:
from datetime import timedelta
three_days_later = now + timedelta(days=3)
print(three_days_later)
它支持 weeks、days、hours、minutes 等多种单位,灵活得很。
时区问题:别让时间出错
你的服务器在东京,用户在北京,时间差一小时。如果不处理时区,日志里的“登录时间”就可能让人困惑。Python 3.9+ 推荐使用 zoneinfo 模块:
from datetime import datetime
from zoneinfo import ZoneInfo
beijing_time = datetime.now(ZoneInfo("Asia/Shanghai"))
tokyo_time = datetime.now(ZoneInfo("Asia/Tokyo"))
print(beijing_time)
print(tokyo_time)
这样就能清楚区分不同时区的时间点。
dateutil:更聪明的解析
标准库功能够用,但遇到模糊输入就容易卡壳。比如 "明天下午三点" 或者 "2025/4/5" 这种不规范格式,dateutil 的 parser 能智能识别:
from dateutil import parser
date1 = parser.parse("2025/4/5")
date2 = parser.parse("Apr 5, 2025 at 3pm")
print(date1) # 成功解析
print(date2) # 也能搞定
需要额外安装:pip install python-dateutil,但它省下的调试时间绝对值回票价。
实际场景:记录脚本运行耗时
写个爬虫,想看看总共跑了多久?简单加两行就行:
start = datetime.now()
# 模拟一些操作
import time
time.sleep(2)
end = datetime.now()
duration = end - start
print(f"耗时:{duration.total_seconds():.2f} 秒")
这种小技巧在调试和优化时特别实用。