当前位置:首页>python>每天10分钟玩转Python基础篇 - 日期时间操作(datetime)

每天10分钟玩转Python基础篇 - 日期时间操作(datetime)

  • 2026-10-12 13:00:56
每天10分钟玩转Python基础篇 - 日期时间操作(datetime)
PYTHON · 基础篇第8课2026.08

还在手动拼年月日字符串?

给你的程序,装个日历

datetime · 日期时间

📦 3 PARTS + CONCLUSION

👉 滑动

PART 01

通俗原理

四类对象

PART 02

核心用法

7 个套路

PART 03

完整案例

倒计时耗时

PART ///

写在最后

避坑自检

这是基础篇第8篇。前面我们学了变量、循环、字符串、列表字典集合、argparse、正则表达式。今天学一个几乎每个程序都会用到的模块:datetime(日期时间)。

你有没有遇到过这些需求:给日志加上时间戳、算两个日期之间差几天、把 2026/08/24 这种字符串转成真正的日期对象、做一个「距离下个生日还有几天」的倒计时?

这些全都要靠日期时间处理。Python 的 datetime 模块就是干这个的——获取当前时间、格式化、解析、算时间差,一把搞定。

PART 01

通俗原理:四类对象

datetime 模块里最重要的有四类对象,先记住它们的名字:

date 只表示日期(年月日)、time 只表示时间(时分秒)、datetime 是日期+时间合体(最常用)、timedelta 是时间差(两个时间之间的间隔)。

用一句话记:datetime 是「某年某月某日某时某分某秒」,timedelta 是「差了多久」。算两个日期差几天、给一个日期加 3 天,用的都是 timedelta。

PART 02

核心用法:7 个套路

STEP 01

获取当前时间

python

from datetime importdatetime,date

now=datetime.now()# 当前日期+时间

today=date.today()# 当前日期(只有年月日)

print(now)# 2026-08-25 19:11:42.054920

print(today)# 2026-08-25

datetime.now() 返回一个 datetime 对象,date.today() 返回一个 date 对象。打印出来就是可读的日期时间。

STEP 02

构造日期时间对象

python

d=datetime(2026,8,24,10,30,15)# 年月日时分秒

print(d)# 2026-08-24 10:30:15

要表示一个特定的时间点,直接传参数构造。参数顺序固定是:年、月、日、时、分、秒(后面还有微秒,一般省略)。

STEP 03

访问字段

python

print(d.year,d.month,d.day)# 2026 8 24

print(d.hour,d.minute,d.second)# 10 30 15

拿到 datetime 对象后,可以单独取它的年、月、日、时、分、秒。

STEP 04

strftime:格式化输出

python

print(d.strftime("%Y-%m-%d %H:%M:%S"))# 2026-08-24 10:30:15

print(d.strftime("%Y年%m月%d日 %H时%M分"))# 2026年08月24日 10时30分

strftime 把 datetime 对象格式化成字符串。格式码用 % 开头:%Y 四位年份、%m 月、%d 日、%H 时、%M 分、%S 秒。其他字符原样保留,所以能拼出任何格式,比如带中文的「2026年08月24日」。

STEP 05

strptime:解析字符串

python

s="2026-08-24 10:30:15"

parsed=datetime.strptime(s,"%Y-%m-%d %H:%M:%S")

print(parsed)# 2026-08-24 10:30:15

strptime 是 strftime 的反向——把字符串解析成 datetime 对象。格式码必须和字符串对得上,否则报错。这就是「把用户填的日期字符串转成真正的日期对象」的关键。

STEP 06

timedelta:算时间差

python

from datetime importtimedelta

future=d+timedelta(days=3)# 加 3 天

print(future)# 2026-08-27 10:30:15

past=d-timedelta(hours=1)# 减 1 小时

print(past)# 2026-08-24 09:30:15

delta=datetime(2026,8,27)-datetime(2026,8,24)

print(delta.days)# 3

timedelta 支持 days、hours、minutes、seconds 等单位。两个 datetime 相减,结果就是一个 timedelta,用 .days 取天数。

STEP 07

timestamp:时间戳

python

ts=d.timestamp()# datetime → 时间戳(浮点数)

print(datetime.fromtimestamp(ts))# 时间戳 → datetime

# 2026-08-24 10:30:15

时间戳是一个数字,表示从 1970 年 1 月 1 日零点到现在的秒数。很多系统(日志、数据库、API)都用时间戳存时间。timestamp() 把 datetime 转成时间戳,fromtimestamp() 反向转回来。

STEP 08

时区处理

python

from datetime importdatetime,timezone

from zoneinfo importZoneInfo

naive=datetime.now()# 本地时间,无时区标记

utc_now=datetime.now(timezone.utc)# UTC 时间,带 +00:00

beijing=ZoneInfo("Asia/Shanghai")# 北京时间(UTC+8)

now_cn=datetime.now(beijing)

print(now_cn)# 2026-08-25 19:27:16+08:00

print(now_cn.astimezone(timezone.utc))# 转成 UTC

datetime.now() 返回的对象 tzinfo 是 None(无时区,叫 naive);datetime.now(timezone.utc) 返回的带 +00:00(有时区,时区的名字叫做 aware)。zoneinfo.ZoneInfo("Asia/Shanghai") 按名字拿时区,astimezone() 做时区换算。跨时区存时间,内部统一用 UTC,展示时转成用户本地时区。

PART 03

完整案例:倒计时 + 运行耗时

把上面串起来,写一个实用的「倒计时 + 运行耗时」小工具:

python

from datetime importdatetime,date,timedelta

target=date(2027,1,1)# 倒计时目标:2027 年元旦

today=date.today()

days_left=(target-today).days

print(f"距离 {target} 还有 {days_left} 天")

start=datetime.now()

import time

time.sleep(0.1)# 模拟耗时

elapsed=datetime.now()-start

print(f"耗时 {elapsed.total_seconds():.3f} 秒")

第一个例子:target - today 两个 date 相减得到 timedelta,.days 就是相差的天数——这就是倒计时的核心。第二个例子:记录开始时间、结束时间,相减得到运行耗时,.total_seconds() 把时间差转成秒数(带小数)。

避坑指南

4 个常见坑

strftime 和 strptime 别搞混:strftime 是 format(把对象格式化成字符串),strptime 是 parse(把字符串解析成对象)。记法:f 是 format(输出),p 是 parse(输入)。

strptime 的格式码必须对得上:字符串是「2026/08/24」,格式码就得写 %Y/%m/%d,写成 %Y-%m-%d 会报错。

timedelta 没有「月」和「年」单位:只有天、小时、分钟、秒。因为月有 28/29/30/31 天,年有闰年,天数不固定,没法直接加减。

timestamp 有小数点:timestamp() 返回的是浮点数(含微秒),转回时用 fromtimestamp()。

Windows 上用 zoneinfo 要先装 tzdata:ZoneInfo("Asia/Shanghai") 在 Windows 上会报 No module named 'tzdata',因为 Windows 没内置时区数据库。用 uv add tzdata 装一下就好;Linux/macOS 系统自带,不用装。

自测检查

4 道题

① 能用 datetime.now() 拿到当前时间,并用 strftime 格式化成「2026-08-25 19:30」这种格式吗?

② 能用 strptime 把字符串「2026/08/24」解析成 datetime 对象吗?

③ 能算出今天到 2027 年 1 月 1 日还有多少天吗?

④ 能算出一段代码运行了多少秒吗?

这四题都能答上来,datetime 的常用套路你就掌握了。日期时间处理会贯穿后面的日志、爬虫、定时任务、数据分析,值得现在就打牢。

既然看到这里了,如果觉得有用,随手点个赞、在看、转发三连吧。

点赞
在看
转发

THANKS FOR READING

最新文章

随机文章