阅读此文:你将掌握最常见的时间/日期处理方式
🌈Hi,小伴们~
时间无形,却在你敲下的每一行代码里奔腾:日志靠它留痕,任务因它唤醒,报表凭它归栏……
今天,我们就用一杯咖啡的时间,把 Python 中最常用的 8 个日期时间技巧,一口气盘清楚!
🎭先认识2位主角
Python世里里时间-日期由2个官方库话事:
①time:1996 年随 Python 1.4 登场
底层秒表—能计算时间戳,能让线程小睡片刻却不会帮你做日期加减,不懂夏令时
②dtetime:2003 年在 Python 2.3 加入
高级日历—把年-月-日-时-分-秒封装成对象,想加 30 天、减 2 小时、转时区,一句话就能搞定
一句话总结:time 管“秒”,datetime 管“天”日常开发 90 % 需求交给 dateime,余下10 % 需精确到秒或与操作系统交互时,再请 time 出马
8 大高频场景讲解🎯
场景1:获取当下的日期/时间
示例代码如下:
from datetime import datetime
# 方法1:年-月-日 时:分:秒:毫秒
now = datetime.now()
print(now)
# 输出:2025-07-13 14:30:15.123456
# 方法2:只要日期年-月-日
today = datetime.now().date()
print(today)
# 输出:2025-07-13
# 方法3:只要时间时:分:秒:毫秒
current_time = datetime.now().time()
print(current_time)
# 输出:14:30:15.123456
📝备注:datetime模块中的datetime类能快速获取当下的日期和时间
场景2:程序需暂停几秒⏳再执行
import time
print("开始")
time.sleep(3) #等待3秒
print("3 秒后继续")
📝备注:time.sleep(3) 会将当前线程暂停3秒 ,操作系统会在 3 秒后将其唤醒,继续执行后续代码
场景3:测算代码运行所耗的时间
import time
# 获取开始的时间戳
start = time.perf_counter()
# 模拟耗时操作
sum = 0
for i in range(1000000):
sum += i
end = time.perf_counter()
print(f"耗时:{end - start:.4f}秒")
# 输出:耗时:0.0453秒
📝备注:此处也可用time.time()实现,但perf_counter()精度更高,且不受系统时钟调整等因素影响更适合算间隔。time.time()或perf_counter()得到的是时间戳:( Python读取你操作系统当前时间,再换算成自UTC1970-01-01 00:00:00 起经过的秒数,最后以浮点数形式返回,如时间戳:1689345123.123456 )
场景4:生成特定的时间样式(如年-月-日)
from datetime import datetime
now = datetime.now()
# 转成:"2025年07月13日 14:30"格式
formatted = now.strftime("%Y年%m月%d日 %H:%M")
print(formatted)
# 转成"Aug 20, 2023"格式
english_style = now.strftime("%b %d, %Y")
print(english_style)
📝常用占位符汇总:
占位符 | 含义 | 示例输出 |
---|---|---|
%Y | 四位数年份 | 2025 |
%m | 两位数月 (01-12) | 07 |
%d | 两位数日 (01-31) | 15 |
%H | 24 小时制时 (00-23) | 14 |
%I | 12 小时制时 (01-12) | 02 |
%M | 两位分钟 (00-59) | 30 |
%S | 两位秒 (00-59) | 45 |
%A | 星期全称 | Monday |
%a | 星期简称 | Mon |
📝备注:strftime 就像一个神奇的“时间变形器”能把日期对象变成你心中所想的任何格式的字符串
场景5:构建自定义的时间对象
from datetime import datetime
# 构造一个格式为:"2025-07-13"日期
date_obj = datetime.strptime("2025-07-13", "%Y-%m-%d").date()
print(date_obj)#2025-07-13
print(type(date_obj))
# <class 'datetime.date'>
# 构造一个格式为:"14:30:00"时间
time_obj = datetime.strptime("14:30:00", "%H:%M:%S").time()
print(time_obj) # 14:30:00
# 构造格式:日期+时间
log_time = datetime.strptime("2025-07-13 14:30:15", "%Y-%m-%d %H:%M:%S")
print(log_time) # 2025-07-13 14:30:15
也可用date进行日期的创建:
from datetime import date
d1 = date(2025, 9, 1)
d2 = date(2025, 9, 5)
# date用于只要日期的操作更便捷
#打印结果:4 days
📝备注:构建日期时留意SupportsIndex上限如:2月不能有30天,不会有13月
场景6:日期也能做加减法
from datetime import datetime, timedelta
# 计算10天后的时间
today = datetime.today()
future=today + timedelta(days=10)
print("10 天后:",future )
# 计算2小时前的时间
past = datetime.now() - timedelta(hours=2)
print(past)
# 计算2个日期的间隔
birth1 = datetime(2000, 2, 29)
birth2 = datetime(2024, 2, 29)
print("相隔天数:", (birth2 - birth1).days)
📝备注:timedelta 就是日期的界缩进尺支持days、hours、minutes、seconds、microseconds多种样式,可灵活组合
场景7:求特定日期(如:本月第1天/本周第1天)
from datetime import datetime, timedelta, date
# 获取本月第一天
first_day = datetime.now().replace(day=1)
# 获取本月最后一天(28+5肯定到下月)
#巧用下个月第一天减1天
next_month = datetime.now().replace(day=28) + timedelta(days=5)
last_day = next_month.replace(day=1) - timedelta(days=1)
# 获取本周周一
today = datetime.now()
monday = today - timedelta(days=today.weekday())
📝备注:replace()会返回一个新的对象,能调整特定的年-月-日、时-分-秒,而函数weekday()返回今天是星期几,若为周一为0,周日则返回值是6
场景8:一键切换全球不同时区
from datetime import datetime
from zoneinfo import ZoneInfo
tokyo_time = datetime.now(ZoneInfo("Asia/Tokyo"))
print("东京时间:", tokyo_time.strftime("%Y-%m-%d %H:%M:%S"))
📝备注:zoneinfo 模块在Python 3.9+ 自带,更低版本的需要用pip进行安装,默认情况下是读取操作系统已配置的时区,传输一个时区对象ZoneInfo() 让代码轻松切换世界各地时钟如:北京时间Asia/Shanghai、纽约时间America/New_York
📌一键收藏
需求 | 推荐 API |
---|---|
拿当前时间 | datetime.now() |
字符串转日期 | datetime.strptime() |
日期转字符串 | .strftime() |
日期加减 | timedelta |
计时计算 | time.perf_counter() |
时区转换 | ZoneInfo("Area/City") |
🏁结语:
📌了解更多,可关注我的微信公众号:“ Python-伍六七 ”,及时拿一手资讯和应用案例!