在 Python 中,日期与时间处理主要使用标准库 datetime:获取当前时刻、构造指定时间、用 strftime 格式化为字符串、用 strptime 从字符串解析,以及用 timedelta 表示间隔并参与加减。仅需日期或时刻时,可分别使用 date、time。本节说明上述类型的基本用法。

当前时间

from datetime import datetime

now = datetime.now()
print(now)
print(now.year, now.month, now.day)
print(now.hour, now.minute, now.second)

构造指定时间

from datetime import datetime

dt = datetime(2024, 1, 15, 10, 30, 0)
print(dt)

strftime:格式化为字符串

将 datetime 转为指定格式的字符串。常用格式码见下表:

from datetime import datetime

now = datetime.now()
print(now.strftime("%Y-%m-%d"))
print(now.strftime("%Y/%m/%d %H:%M"))
print(now.strftime("%A"))
格式码含义
%Y四位年份
%m两位月份
%d两位日期
%H / %M / %S时 / 分 / 秒
%A / %a星期全称 / 缩写
%B / %b月份全称 / 缩写

strptime:从字符串解析

与 strftime 方向相反:按格式码将字符串解析为 datetime。格式与文本不一致时将引发 ValueError:

from datetime import datetime

s = "2024-01-15 10:30"
dt = datetime.strptime(s, "%Y-%m-%d %H:%M")
print(dt)
print(dt.month)

时间差 timedelta

timedelta 表示时间间隔,可与 datetime 相加或相减,也可比较先后:

from datetime import datetime, timedelta

now = datetime.now()
future = now + timedelta(days=7)
print(future)

diff = future - now
print(diff.days)
print(diff.total_seconds())

if future > now:
    print("future 更晚")

date 与 time

from datetime import date, time

d = date.today()
print(d)

t = time(14, 30)
print(t)

常见错误

  • strftime 表示 format(对象→字符串),strptime 表示 parse(字符串→对象),名称易记混。
  • datetime.now() 一般为本地时区;需要 UTC 时可使用带时区信息的 API,例如 datetime.now(timezone.utc)。
  • strptime 对格式要求严格,多余空格或位数不符均可能失败。

本节说明了 Python 中 datetime 的常用类型与格式化。下一节介绍math 与 random:数值函数与随机抽样。