第 40 课 · 阶段七 · 进阶主题
日期时间与时间戳
时间处理是程序常客。这一课彻底搞懂 datetime 的获取、格式化、运算,以及 time 模块的时间戳。
🎯 学完本课你将掌握
- 用 datetime 获取与格式化当前时间
- 进行日期加减与比较
- 理解时间戳与时间转换
一、获取当前时间
获取时间.py
1from datetime import datetime, date, time23now = datetime.now()4print(now) # 2026-09-01 14:30:00.1234565print(now.date()) # 2026-09-01 只取日期6print(now.time()) # 14:30:00.123456 只取时间7print(now.year, now.month, now.day)8print(now.hour, now.minute, now.second)二、格式化与解析
格式化.py
1from datetime import datetime23now = datetime.now()4print(now.strftime("%Y年%m月%d日 %H:%M:%S")) # 2026年09月01日 ...5print(now.strftime("%A")) # 星期几(英文)67# 字符串 → datetime(解析)8s = "2026-09-01 08:30:00"9dt = datetime.strptime(s, "%Y-%m-%d %H:%M:%S")10print(dt) # 2026-09-01 08:30:0011print(dt.weekday()) # 0=周一三、日期加减:timedelta
日期运算.py
1from datetime import datetime, timedelta23now = datetime.now()4print(now + timedelta(days=7)) # 一周后5print(now - timedelta(days=1)) # 昨天6print(now + timedelta(hours=3)) # 三小时后7print(now + timedelta(weeks=2, days=1))89# 两个日期相减得到时间差10start = datetime(2026, 9, 1, 9, 0)11end = datetime(2026, 9, 1, 12, 30)12diff = end - start13print(diff) # 3:30:0014print(diff.total_seconds()) # 12600.0 秒四、time 模块与时间戳
时间戳是从 1970-01-01 00:00:00(UTC)到现在的秒数,计算机内部常用它表示时间。
时间戳.py
1import time23print(time.time()) # 当前时间戳(浮点秒)4print(int(time.time())) # 取整56# 时间戳 → 本地时间元组 → 格式化字符串7ts = time.time()8lt = time.localtime(ts)9print(time.strftime("%Y-%m-%d %H:%M:%S", lt))五、综合案例:学习计时器
计时器.py
1import time2from datetime import datetime34print("开始学习:", datetime.now().strftime("%H:%M:%S"))5start = time.time()6input("学完一节课后按回车结束...")7end = time.time()8used = end - start9print(f"本次学习了 {used:.0f} 秒,约 {used / 60:.1f} 分钟")六、常见错误与解决
常见错误与解决
| 错误现象 | 原因 / 解决方法 |
|---|---|
strptime 解析报错 | 格式符与字符串不匹配:%Y 四位年、%m 两位月、%H 24小时,逐一对齐。 |
时间格式化出英文星期 | %A 是英文星期;要中文用列表映射或 f"星期{dt.weekday()+1}"。 |
时区对不上 | datetime.now() 是本地时间;想要 UTC 用 datetime.utcnow()。 |
✍️ 小练习
写程序:输出今天的日期和星期、100 天后是哪天、计算两个生日之间的天数差。
📌 本节小结
datetime 管日期时间:now 获取、strftime 格式化、strptime 解析、timedelta 加减;time.time() 拿时间戳。时间处理三件套,做日志、调度、计时都用得上。