Python: 日期与时间

最后更新:2026-09-22

处理日期和时间是编程中最常见的需求之一——记录日志时间、计算借阅天数、统计某段时间的数据……datetime 模块是 Python 处理日期时间的标准方式。


1. 获取当前时间

PYTHON
from datetime import datetime, date, time

# 当前日期时间
now = datetime.now()
print(now)                      # 2026-06-23 16:00:00.123456

# 当前日期
today = date.today()
print(today)                    # 2026-06-23

# 创建指定日期
d = datetime(2026, 6, 23, 15, 30, 0)
print(d)                        # 2026-06-23 15:30:00

▶ 示例:生日提醒(难度⭐)

▶ 试一试

输出:

TEXT 📖 仅展示
# 函数定义成功


2. 格式化与解析

PYTHON
from datetime import datetime

# 日期 → 字符串(格式化)
now = datetime.now()
print(now.strftime("%Y-%m-%d"))              # 2026-06-23
print(now.strftime("%Y年%m月%d日"))          # 2026年06月23日
print(now.strftime("%H:%M:%S"))              # 16:00:00
print(now.strftime("%A"))                    # Tuesday(星期几)

# 字符串 → 日期(解析)
date_str = "2026-06-23 15:30:00"
parsed = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print(parsed)                                # 2026-06-23 15:30:00
格式符 含义 示例
%Y 四位年份 2026
%m 两位月份 06
%d 两位日期 23
%H 小时(24时) 15
%M 分钟 30
%S 秒 00
%A 星期全名 Tuesday
💡 strftime 是"日期→字符串",strptime 是"字符串→日期"。 记不住的话想"f=format, p=parse"——format 是输出,parse 是解析。



3. timedelta:时间差

PYTHON
from datetime import datetime, timedelta

now = datetime.now()

# 计算未来/过去的时间
future = now + timedelta(days=7)
past = now - timedelta(days=30)

print(f"7天后:{future.strftime('%Y-%m-%d')}")
print(f"30天前:{past.strftime('%Y-%m-%d')}")

# 时间计算
print(timedelta(days=7))                     # 7 days, 0:00:00
print(timedelta(hours=3, minutes=15))        # 3:15:00
print(timedelta(weeks=2))                    # 14 days, 0:00:00

# 两个日期相减
d1 = datetime(2026, 6, 1)
d2 = datetime(2026, 6, 23)
diff = d2 - d1
print(f"相差 {diff.days} 天")               # 相差 22 天

▶ 示例:订阅到期提醒(难度⭐⭐)

▶ 试一试

输出:

TEXT 📖 仅展示
=== 订阅到期检查 ===


▶ 示例:项目截止日期计算(难度⭐)

▶ 试一试

输出:

TEXT 📖 仅展示
=== 项目倒计时 ===
🟢 课程作业:还剩 22 天
🟢 毕业设计:还剩 127 天
🟡 实习报告:仅剩 10 天!

30 天后是:2026年09月09日


4. 常见应用场景


❓ 常见问题

Q datetime.now() 返回的是本地时间还是 UTC 时间?
A 本地时间。如果需要 UTC 时间用 datetime.utcnow()。但注意 utcnow() 返回的是不带时区信息的 naive 时间。生产环境建议用 datetime.now(timezone.utc) 或 pytz / zoneinfo 处理时区。
Q strptime 解析失败会怎样?
A 抛出 ValueError——"time data 'xxx' does not match format '%Y-%m-%d'"。用 try-except 包起来处理错误情况。常见的坑:月份和日期必须是两位数(%m 不匹配 "6",需要 "06")。
Q timedelta 最大支持多少天?
A 理论上没有上限——timedelta(days=1000000) 也是合法的。但注意 total_seconds() 可能溢出。日常使用完全不用担心范围问题。

📖 小节


📝 作业

  1. 基础题(难度⭐):输出当前时间的以下格式:2026年06月23日 星期二、2026-06-23 16:00、06/23/2026。

  2. 进阶题(难度⭐⭐):写一个函数 workdays_between(start, end),计算两个日期之间有多少个工作日(周一到周五)。提示:用 timedelta 遍历每一天,用 weekday() 判断星期几(0=周一,4=周五)。

  3. 挑战题(难度⭐⭐⭐):写一个"番茄钟"程序。工作 25 分钟 → 休息 5 分钟,循环 4 次后长休息 15 分钟。用 time.sleep() 模拟计时,用 datetime 显示当前阶段和剩余时间。

Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏