跳转到主要内容
模块 8 · 第 2 课(共 4)课程中的30/36~12 min
模块课程(2/4)

日期时间:日期和时间

datetime 模块提供了表示日期和时间的类。

三个主要类

  • date — 仅日期(年、月、日)
  • time — 仅时间(小时、分钟、秒、微秒)
  • datetime — 日期 + 时间
  • timedelta — 持续时间(两个瞬间之间的差异)
Python
from datetime import date, time, datetime, timedelta

date(2025, 1, 1)                  # datetime.date(2025, 1, 1)
time(14, 30, 0)                   # datetime.time(14, 30)
datetime(2025, 1, 1, 14, 30, 0)   # datetime.datetime(2025, 1, 1, 14, 30)

“现在”:now 和 today

Python
datetime.now()        # current date + time
date.today()          # current date only

使用 timedelta 进行算术

Python
from datetime import datetime, timedelta

ora = datetime(2025, 1, 1, 12, 0)
domani = ora + timedelta(days=1)
una_ora_fa = ora - timedelta(hours=1)

# difference between two datetimes -> timedelta
delta = domani - ora
delta.days        # 1
delta.total_seconds()   # 86400.0

timedelta 接受 days、seconds、microseconds、milliseconds、 minutes、hours、weeks(不是 months 或 years,它们是不明确的)。

格式:strftime

根据模式转换日期时间 → 字符串。

Python
ora = datetime(2025, 1, 1, 14, 30)
ora.strftime("%Y-%m-%d")         # '2025-01-01'
ora.strftime("%d/%m/%Y %H:%M")   # '01/01/2025 14:30'
ora.strftime("%A %d %B %Y")      # 'Wednesday 01 January 2025' (locale-dependent)

最常用的指令: %Y 4 位数年份、 %m 2 位数月份、 %d 2 位数日期、 %H 24 小时,%M 分钟,%S 秒。

解析:strptime

相反:字符串 → 日期时间,给定预期模式。

Python
datetime.strptime("01/01/2025", "%d/%m/%Y")
# datetime.datetime(2025, 1, 1, 0, 0)

ISO 8601

对于数据交换,始终首选 ISO 8601 格式 (YYYY-MM-DDTHH:MM:SS):

Python
ora.isoformat()                 # '2025-01-01T14:30:00'
datetime.fromisoformat("2025-01-01T14:30:00")

时区和感知日期时间

默认情况下,Python 中的 datetime 对象是naive(意味着它们不包含时区信息)。对于现实世界的应用程序,最佳实践是通过 datetime.timezone.utc 或利用 zoneinfo 模块设置时区信息,让它们感知。

尝试一下

锻炼#python.m8.l2.e1
尝试:0加载中...

计算 2025 年 1 月 1 日后 30 天的日期,并将其格式设置为变量“date_str”中的“YYYY-MM-DD”。评估“date_str”。

正在加载编辑器...
显示提示

基数 + timedelta(days=30),然后 .strftime

3 次尝试后可用的解决方案

复习练习

锻炼#python.m8.l2.e2
尝试:0加载中...

给定字符串 s = '15/03/2025'`,使用 strptime 将其解析为变量 d (日期时间对象)。计算一周中的整数天“d.weekday()”(0=周一,6=周日)。

正在加载编辑器...
显示提示

strptime 与意大利格式模式。

3 次尝试后可用的解决方案

额外的挑战

锻炼#python.m8.l2.e3
尝试:0加载中...

Import `date` from the `datetime` module. Calculate the difference in days between December 25, 2026 (`date(2026, 12, 25)`) and December 20, 2026 (`date(2026, 12, 20)`). Store the integer number of days (using the `.days` attribute of the delta) in `days_diff`. Finally, evaluate the variable.

正在加载编辑器...
显示提示

The difference between two dates returns a timedelta. Access the integer days with delta.days.

3 次尝试后可用的解决方案