Python日期与时间主要用标准库 datetime:取当前时刻、构造指定时间、用 strftime 格式化、用 strptime 解析字符串,以及用 timedelta 做加减与比较。只要日期或只要时刻时,也可以单独用 datetime

当前时间

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 对格式要求严格,多一个空格或少一位数字都会失败。