上周帮运营朋友处理一批活动数据,她每天都在干同一件事:把 20260518 这种格式的字符串转成 2026-05-18,再算距离今天过了几天。我说你写个函数不就完了?她说:每次都要查 strftime 那个格式表,%Y 还是 %y 来着?%m 是月份还是分钟来着?查完写完,下次又忘了。
我说,那就做一个速查表,以后直接复制。
一段代码解决四个最常碰到的日期时间问题:
字符串和 datetime 互转
格式化输出(想显示什么样子都行)
日期加减(加几天、减几个月)
算两个日期之间隔了多久
全部用 Python 内置的 datetime,不用装任何库。
核心代码
from datetime import datetime, timedelta# ===== 格式速查表(背不住就对了,用的时候复制) =====# %Y=年(2026) %y=年(26) %m=月(05) %d=日(18)# %H=时(24h) %I=时(12h) %M=分 %S=秒# %A=星期全名 Monday %a=星期缩写 Mon# %B=月份全名 May %b=月份缩写 Maynow = datetime.now()# 1. 格式化:datetime → 字符串print(now.strftime("%Y-%m-%d")) # 2026-05-18print(now.strftime("%Y年%m月%d日 %H:%M")) # 2026年05月18日 14:30print(now.strftime("%Y%m%d")) # 20260518print(now.strftime("%A, %B%d")) # Monday, May 18# 2. 解析:字符串 → datetimedatetime.strptime("2026-05-18", "%Y-%m-%d")datetime.strptime("20260518", "%Y%m%d")datetime.strptime("2026/5/18 14:30", "%Y/%m/%d%H:%M")# 3. 日期加减tomorrow = now + timedelta(days=1)last_week = now - timedelta(weeks=1)next_month = now + timedelta(days=30) # 粗略算法# 4. 算间隔delta = datetime(2026, 12, 31) - nowprint(f"离年底还有 {delta.days} 天")
使用步骤
不需要装任何库,Python 自带
复制上面的代码到一个 .py 文件
改你自己的日期字符串和格式就行
运行:python 日期速查.py
重点就两行:
格式符号记不住?看代码里的注释,用哪个抄哪个。
常见问题
%Y 和 %y 到底啥区别?
%Y 是四位年份(2026),%y 是两位(26)。大部分场景用 %Y,别搞混。
strptime 报错 ValueError?
格式字符串和你传进去的字符串对不上。
比如你写 "2026-5-18" 但格式写 "%Y-%m-%d"(月和日应该是两位),直接报错,月份补零:05 不是 5。
想加一个月怎么办?
timedelta 只能加天数,不能直接加月份。
用 dateutil.relativedelta 可以,但要装库。偷懒的办法:直接加 30 天,粗略够用。
想判断今天是周几?
now.weekday() 返回 0=周一,6=周日。还可以直接 now.strftime("%A") 拿英文星期名。
时区问题怎么搞?
datetime.now() 是本地时间,要 UTC 就用 datetime.utcnow()。
如果要做正经的时区转换,得装 pytz 库,但那是另一个话题了。
日期时间这东西,没人能背住所有格式符号。做一张速查表存着,比每次百度快十倍。
下一期聊个狠的:Excel里几十万行数据,怎么几秒钟找出重复的? 不是去重,是标记出来让你看看哪些是重复的。
我是鲁叶的Python,这个系列持续更新中,每篇解决一个具体小问题。