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 表示一段时间间隔,可以和 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 时可使用带时区信息的写法,例如datetime.nowtimezone.utc)。strptime对格式要求严格,多一个空格或少一位数字都会失败。