【Python 工具人快餐 · 第 5 份】
开袋即食
datetime 模块把「时间点」和「时间段」拆成 3 个常用类:
• datetime:具体时刻
• timedelta:时间差
• strftime / strptime:字符串 ⇋ 时间
记住「加减乘除」全是 timedelta,跨天、跨月、跨年零心智负担。
1 行代码 4 连发
from datetime import datetime, timedeltatomorrow = datetime.now() + timedelta(days=1) # 明天此刻
ago_30m = datetime.now() - timedelta(minutes=30) # 30 分钟前
ds = datetime.strptime('2024-06-01', '%Y-%m-%d') # 字符串→时间
s = ds.strftime('%b %d, %Y') # 时间→字符串
场景实拍:批量重命名照片为「拍摄日期+序号」
需求:把 IMG_1234.jpg
改成 2024-06-01_001.jpg
。
from datetime import datetime
from pathlib import Pathfor i, p in enumerate(Path('photos').glob('*.jpg'), 1):ctime = datetime.fromtimestamp(p.stat().st_ctime)new_name = f"{ctime:%Y-%m-%d}_{i:03}{p.suffix}"p.rename(p.with_name(new_name))
• fromtimestamp
秒变 datetime
• %Y-%m-%d
模板直接拼文件名
• with_name
保留原后缀,跨平台安全
升级加料
- 时区:
from zoneinfo import ZoneInfo
→datetime.now(ZoneInfo('Asia/Shanghai'))
- 日期差:
delta.days
,delta.total_seconds()
随手拿 - 月底最后一天:
datetime(year, month+1, 1) - timedelta(days=1)
打包带走
时间加减全靠 timedelta,
格式化字符串只记 %Y-%m-%d %H:%M:%S
,
再也不担心「少 8 小时」!